diff --git a/.classpath b/.classpath
index 7bc01d9a9c..51769745b2 100644
--- a/.classpath
+++ b/.classpath
@@ -1,9 +1,9 @@
-
-
+
+
diff --git a/.gitignore b/.gitignore
index ac30011bbc..9b9bd8e396 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,18 +13,22 @@ bin/
gen/
target/
-# Local configuration file (sdk path, etc)
+# Local configuration files (sdk path, etc)
local.properties
+oc_workaround/local.properties
+oc_framework/local.properties
+oc_framework-test-project/local.properties
+tests/local.properties
# Mac .DS_Store files
.DS_Store
-# These files are created automatically by Eclipse:
-tests/proguard-project.txt
-tests/project.properties
-tests/ant.properties
-tests/build.xml
+# Proguard README
proguard-project.txt
+oc_workaround/proguard-project.txt
+oc_framework/proguard-project.txt
+oc_framework-test-project/proguard-project.txt
+tests/proguard-project.txt
# Should not be commited inside this repo:
actionbarsherlock/
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index b41da32195..f0ca872146 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
[submodule "actionbarsherlock"]
path = actionbarsherlock
url = git://github.com/JakeWharton/ActionBarSherlock.git
+[submodule "owncloud-android-library"]
+ path = owncloud-android-library
+ url = git://github.com/owncloud/android-library.git
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000..50b73d1b98
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,22 @@
+language: android
+android:
+ components:
+ - build-tools-20.0.0
+ - android-19
+ - android-17
+ - android-14
+ - extra-android-support
+ licenses:
+ - 'android-sdk-license-5be876d5'
+ - 'android-sdk-license-598b93a6'
+
+jdk: oraclejdk7
+
+before_install:
+ - rm pom.xml
+ - ./setup_env.sh
+
+script:
+ - ant clean
+ - ant debug
+
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f1900f8c9f..a5990afd45 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3,7 +3,7 @@
ownCloud Android client application
Copyright (C) 2012 Bartek Przybylski
- Copyright (C) 2012-2013 ownCloud Inc.
+ Copyright (C) 2012-2014 ownCloud Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2,
@@ -18,8 +18,8 @@
along with this program. If not, see .
-->
+ android:versionCode="10600100"
+ android:versionName="1.6.1" xmlns:android="http://schemas.android.com/apk/res/android">
@@ -54,16 +54,12 @@
>
-
-
-
-
-
+
@@ -83,7 +79,8 @@
-
+
+
-
+
-
+
+ >
@@ -149,12 +150,12 @@
+
-
@@ -169,6 +170,10 @@
+
+
+
+
@@ -178,7 +183,16 @@
-
+
+
+
+
+
diff --git a/SETUP.md b/SETUP.md
index 6e7b7f620a..39539038e9 100644
--- a/SETUP.md
+++ b/SETUP.md
@@ -1,56 +1,92 @@
- If you want to start help developing ownCloud please follow the [contribution guidlines][0] and observe these instructions:
+If you want to start help developing ownCloud please follow the [contribution guidelines][0] and observe these instructions.
+
+If you have any problems, start again with 1) and work your way down. If something still does not work as described here, please open a new issue describing exactly what you did, what happened, and what should have happened.
- 1. Fork and download android/develop repository:
+### 1) Fork and download android/develop repository:
- - NOTE: You must have git in your enviroment path
- - Navigate to https://github.com/owncloud/android, click fork.
- - Clone your new repo: "git clone git@github.com:YOURGITHUBNAME/android.git"
- - "cd android"
- - Checkout remote develop branch: "git checkout -b develop remotes/origin/develop"
- - Pull changes from your develop branch: "git pull origin develop"
- - Make sure to get the latest changes from official android/develop branch:
- - Make official owncloud repo known as upstream: "git remote add upstream git@github.com:owncloud/android.git"
- - Pull latest changes from upstream: "git pull upstream develop"
+NOTE: Android SDK with platforms 8, 14 and 19 (and maybe others) need to be installed.
+ You must have the Android SDK 'tools/', and 'platforms-tools/' folders in your environment path variable.
+ "git" need to be installed and in your environment path variable.
- 2. Building with console/maven:
+* Navigate to https://github.com/owncloud/android, click fork.
+* Clone your new repo: "git clone git@github.com:YOURGITHUBNAME/android.git"
+* Move to the project folder with "cd android"
+* Checkout remote develop branch: "git checkout -b develop remotes/origin/develop"
+* Pull changes from your develop branch: "git pull origin develop"
+* Make official ownCloud repo known as upstream: "git remote add upstream git@github.com:owncloud/android.git"
+* Make sure to get the latest changes from official android/develop branch: "git pull upstream develop"
+* Complete the setup of project properties and resolve pending dependencies running "setup_env.bat" or "./setup_env.sh" .
- - OPTIONAL, CONTINUE WITH STEP 3 IF NOT REQUIRED!
- - NOTE: You must have mvn in your enviroment path
- - Download/install Android plugin for Maven, then build ownCloud with mvn:
- - "cd .."
- - "git clone https://github.com/mosabua/maven-android-sdk-deployer.git"
- - "cd maven-android-sdk-deployer"
- - "mvn -pl com.simpligility.android.sdk-deployer:android-17 -am install"
- - "cd ../android"
- - Now you can create APK using "mvn package"
+At this point you can continue using different tools to build the project. Sections 2a), 2b), and 2c) describe some of the existing alternatives.
- 3. Building with Eclipse:
-
- - NOTE: You must have android/tools, and 'platforms-tools' in your enviroment path
- - Prepare building with Eclipse:
- - "setup_env.bat" or "./setup_env.sh"
- - Open Eclipse and create new "Android Project from Existing Code". As root choose android/actionbarsherlock/library
- - Increase Android API level until project compiles. 14 should work.
- - Clean project and compile.
- - Make sure android/actionbarsherlock/library/bin/library.jar was created!
- - Import OwnCloud Android project.
- - Increase Android API level to 17.
- - Clean project and compile.
- - After those actions you should be good to go. HAVE FUN!
- - NOTE: Even though API level is set to 17, APK also runs on older devices because in AndroidManifest.xml minSdkVersion is set to 8.
-
- 4. Create pull request:
+### 2a) Building with Ant:
- - NOTE: You must sign the [Contributor Agreement][1] before your changes can be accepted!
- - Commit your changes locally: "git commit -a"
- - Push your changes to your Github repo: "git push"
- - Browse to https://github.com/YOURGITHUBNAME/android/pulls and issue pull request
- - Click "Edit" and set "base:develop"
- - Again, click "Edit" and set "compare:develop"
- - Enter description and send pull request.
+NOTE: You must have the Android SDK 'tools/', and 'platforms-tools/' folders in your environment path variable.
+
+* Run "ant clean" .
+* Run "ant debug" to generate a debuggable version of the ownCloud app.
+
+### 2b) Building with console/maven:
+
+NOTE: You must have mvn (version >= 3.1.1) in your environment path. Current Android 'platforms-tools' need to be installed.
+
+Download/install Android plugin for Maven, install owncloud-android-library, then build ownCloud with mvn:
+
+* cd ..
+* git clone https://github.com/mosabua/maven-android-sdk-deployer.git
+* cd maven-android-sdk-deployer
+* mvn -pl com.simpligility.android.sdk-deployer:android-19 -am install
+* cd ../android/owncloud-android-library
+* mvn install
+* cd ..
+
+Now you can create ownCloud APK using "mvn package"
+
+### 2c) Building with Eclipse:
+
+NOTE: You must have the Android SDK 'tools/', and 'platforms-tools/' folders in your environment path variable.
+
+* Complete the setup of project properties and resolve pending dependencies running "setup_env.bat" or "./setup_env.sh" .
+* Open Eclipse and create new "Android Project from Existing Code". Choose android/actionbarsherlock/library as root.
+* Clean project and compile.
+* If any error appear, check the project properties; in the 'Android' section, API Level should be greater or equal than 14.
+* If "error loading libz.so.1" appears, try "sudo apt-get install lib32z1"
+* Make sure android/actionbarsherlock/library/bin/library.jar was created.
+* Create a new "Android Project from Existing Code". Choose android/owncloud-android-library as root. (test and sample clients are not required.)
+* Clean project and compile.
+* If any error appear, check the project properties; in the 'Android' section, API Level should be 19 or greater.
+* Make sure 'android/owncloud-android-library/bin/owncloud android library.jar' was created.
+* Import ownCloud Android project.
+* Clean project and compile.
+* If any error appears, check the project properties of owncloud-android project; in the 'Android' section:
+ - API Level should be 19 or greater.
+ - Two library projects should appear referred in the bottom square: actionbarsherlock/library and owncloud-android-library. Add them if needed.
+* After those actions you should be good to go. HAVE FUN!
+
+NOTE: Even though API level is set to 19, APK also runs on older devices because in AndroidManifest.xml minSdkVersion is set to 8.
+
+### 3) Create pull request:
+
+NOTE: You must sign the [Contributor Agreement][1] before your changes can be accepted!
+
+* Commit your changes locally: "git commit -a"
+* Push your changes to your Github repo: "git push"
+* Browse to https://github.com/YOURGITHUBNAME/android/pulls and issue pull request
+* Click "Edit" and set "base:develop"
+* Again, click "Edit" and set "compare:develop"
+* Enter description and send pull request.
+
+### 4) Create another pull request:
+
+To make sure your new pull request does not contain commits which are already contained in previous PRs, create a new branch which is a clone of upstream/develop.
+
+* git fetch upstream
+* git checkout -b my_new_develop_branch upstream/develop
+* If you want to rename that branch later: "git checkout -b my_new_develop_branch_with_new_name"
+* Push branch to server: "git push -u origin name_of_local_develop_branch"
+* Use Github to issue PR
[0]: https://github.com/owncloud/android/blob/master/CONTRIBUTING.md
[1]: http://owncloud.org/about/contributor-agreement/
-
diff --git a/THIRD_PARTY.txt b/THIRD_PARTY.txt
index d85eb89908..6df2e9aaf9 100644
--- a/THIRD_PARTY.txt
+++ b/THIRD_PARTY.txt
@@ -60,4 +60,12 @@ The third party software included and used by this project is:
A binary JAR file must be generated from this linked project
and included in the ownCloud client APK.
See http://http://actionbarsherlock.com/
+
+ * TouchImageView, commit 6dbeac4f11936185ba374c73144ac431c23c9aab
+ Copyright (c) 2012 Michael Ortiz
+ Licensed under MIT License
+ JAR file libs/touch-image-view.jar has been generated by ownCloud Inc., including without
+ modifications com.ortiz.touch.ExtendedViewPager and com.ortiz.touch.TouchImageView classes.
+ See https://github.com/MikeOrtiz/TouchImageView
+
\ No newline at end of file
diff --git a/libs/disklrucache-2.0.2.jar b/libs/disklrucache-2.0.2.jar
new file mode 100644
index 0000000000..ca7907d0e2
Binary files /dev/null and b/libs/disklrucache-2.0.2.jar differ
diff --git a/libs/jackrabbit-webdav-2.2.5-jar-with-dependencies.jar b/libs/jackrabbit-webdav-2.2.5-jar-with-dependencies.jar
deleted file mode 100755
index 2dd374f9b6..0000000000
Binary files a/libs/jackrabbit-webdav-2.2.5-jar-with-dependencies.jar and /dev/null differ
diff --git a/libs/touch-image-view.jar b/libs/touch-image-view.jar
new file mode 100644
index 0000000000..539f615102
Binary files /dev/null and b/libs/touch-image-view.jar differ
diff --git a/lint.xml b/lint.xml
deleted file mode 100644
index ee0eead5bb..0000000000
--- a/lint.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/oc_jb_workaround/AndroidManifest.xml b/oc_jb_workaround/AndroidManifest.xml
index 1b12fb493d..ada508cab6 100644
--- a/oc_jb_workaround/AndroidManifest.xml
+++ b/oc_jb_workaround/AndroidManifest.xml
@@ -1,8 +1,8 @@
+ android:versionCode="0100019"
+ android:versionName="1.0.19" >
4.0.0
com.owncloud.android
owncloud
- 1.3.21-SNAPSHOT
+ ${owncloud.version}
apk
Owncloud Android
+ 1.5.1-SNAPSHOT
1.6
- 4.2.2_r2
+
+ 4.4.2_r3
+
+ 19
4.2.0
@@ -22,9 +26,32 @@
scm:git:git@github.com:owncloud/android.git
https://github.com/owncloud/android
-
+
-
+
+
+ touch-image-view.jar
+ touch-image-view.jar
+ 1.0
+ system
+ ${basedir}/libs/touch-image-view.jar
+
+
+
+
+
+
+ android-support-v4.jar
+ android-support-v4.jar
+ 1.0
+ system
+ ${basedir}/third_party/android-support-library/android-support-v4.jar
+
+
android
android
@@ -46,11 +73,12 @@
apklib
+
- org.apache.jackrabbit
- jackrabbit-webdav
- 2.5.2
-
+ com.owncloud.android
+ owncloud-android-library
+ ${owncloud.version}
+
@@ -74,12 +102,11 @@
com.jayway.maven.plugins.android.generation2
android-maven-plugin
- 3.5.0
+ 3.8.0
-
${env.ANDROID_HOME}
- 17
+ ${google.android-api}
true
diff --git a/project.properties b/project.properties
index c9e58408e8..28edd9934e 100644
--- a/project.properties
+++ b/project.properties
@@ -10,3 +10,4 @@
# Project target.
target=android-19
android.library.reference.1=actionbarsherlock/library
+android.library.reference.2=owncloud-android-library
diff --git a/res/drawable-hdpi-v11/notification_icon.png b/res/drawable-hdpi-v11/notification_icon.png
new file mode 100644
index 0000000000..9e634a8cc3
Binary files /dev/null and b/res/drawable-hdpi-v11/notification_icon.png differ
diff --git a/res/drawable-hdpi-v9/ic_action_create_dir.png b/res/drawable-hdpi-v9/ic_action_create_dir.png
deleted file mode 100644
index ece0eb4425..0000000000
Binary files a/res/drawable-hdpi-v9/ic_action_create_dir.png and /dev/null differ
diff --git a/res/drawable-hdpi-v9/ic_action_settings.png b/res/drawable-hdpi-v9/ic_action_settings.png
new file mode 100644
index 0000000000..86b54f4c71
Binary files /dev/null and b/res/drawable-hdpi-v9/ic_action_settings.png differ
diff --git a/res/drawable-hdpi-v9/ic_action_upload.png b/res/drawable-hdpi-v9/ic_action_upload.png
deleted file mode 100644
index 2369348c9d..0000000000
Binary files a/res/drawable-hdpi-v9/ic_action_upload.png and /dev/null differ
diff --git a/res/drawable-hdpi/copy_link.png b/res/drawable-hdpi/copy_link.png
new file mode 100644
index 0000000000..35df55f751
Binary files /dev/null and b/res/drawable-hdpi/copy_link.png differ
diff --git a/res/drawable-hdpi/file.png b/res/drawable-hdpi/file.png
index 08f993720f..71d739070a 100644
Binary files a/res/drawable-hdpi/file.png and b/res/drawable-hdpi/file.png differ
diff --git a/res/drawable-hdpi/file_doc.png b/res/drawable-hdpi/file_doc.png
index 068ed5725a..e9c232398d 100644
Binary files a/res/drawable-hdpi/file_doc.png and b/res/drawable-hdpi/file_doc.png differ
diff --git a/res/drawable-hdpi/file_image.png b/res/drawable-hdpi/file_image.png
index dc40bae8d5..bdb2e65c7e 100644
Binary files a/res/drawable-hdpi/file_image.png and b/res/drawable-hdpi/file_image.png differ
diff --git a/res/drawable-hdpi/file_movie.png b/res/drawable-hdpi/file_movie.png
index 2acfaf8d76..e178ccee4f 100644
Binary files a/res/drawable-hdpi/file_movie.png and b/res/drawable-hdpi/file_movie.png differ
diff --git a/res/drawable-hdpi/file_pdf.png b/res/drawable-hdpi/file_pdf.png
index a4af281541..85c8953020 100644
Binary files a/res/drawable-hdpi/file_pdf.png and b/res/drawable-hdpi/file_pdf.png differ
diff --git a/res/drawable-hdpi/file_ppt.png b/res/drawable-hdpi/file_ppt.png
new file mode 100644
index 0000000000..4fb809ebfb
Binary files /dev/null and b/res/drawable-hdpi/file_ppt.png differ
diff --git a/res/drawable-hdpi/file_sound.png b/res/drawable-hdpi/file_sound.png
index 33045afb17..30f5367c12 100644
Binary files a/res/drawable-hdpi/file_sound.png and b/res/drawable-hdpi/file_sound.png differ
diff --git a/res/drawable-hdpi/file_xls.png b/res/drawable-hdpi/file_xls.png
new file mode 100644
index 0000000000..f6a2cc8d53
Binary files /dev/null and b/res/drawable-hdpi/file_xls.png differ
diff --git a/res/drawable-hdpi/file_zip.png b/res/drawable-hdpi/file_zip.png
index 398f601d78..bffacb43ae 100644
Binary files a/res/drawable-hdpi/file_zip.png and b/res/drawable-hdpi/file_zip.png differ
diff --git a/res/drawable-hdpi/folder_public.png b/res/drawable-hdpi/folder_public.png
new file mode 100644
index 0000000000..337aba941f
Binary files /dev/null and b/res/drawable-hdpi/folder_public.png differ
diff --git a/res/drawable-hdpi/ic_action_create_dir.png b/res/drawable-hdpi/ic_action_create_dir.png
index 15068bc7fa..ece0eb4425 100644
Binary files a/res/drawable-hdpi/ic_action_create_dir.png and b/res/drawable-hdpi/ic_action_create_dir.png differ
diff --git a/res/drawable-hdpi/ic_action_settings.png b/res/drawable-hdpi/ic_action_settings.png
new file mode 100644
index 0000000000..999d0f0d8c
Binary files /dev/null and b/res/drawable-hdpi/ic_action_settings.png differ
diff --git a/res/drawable-hdpi/ic_action_upload.png b/res/drawable-hdpi/ic_action_upload.png
index b372b7e19a..2369348c9d 100644
Binary files a/res/drawable-hdpi/ic_action_upload.png and b/res/drawable-hdpi/ic_action_upload.png differ
diff --git a/res/drawable-hdpi/ic_favorite.png b/res/drawable-hdpi/ic_favorite.png
new file mode 100644
index 0000000000..1cb4d85798
Binary files /dev/null and b/res/drawable-hdpi/ic_favorite.png differ
diff --git a/res/drawable-hdpi/ic_menu_archive.png b/res/drawable-hdpi/ic_menu_archive.png
index 0bdcac5e22..7d25b82bd7 100644
Binary files a/res/drawable-hdpi/ic_menu_archive.png and b/res/drawable-hdpi/ic_menu_archive.png differ
diff --git a/res/drawable-hdpi/notification_icon.png b/res/drawable-hdpi/notification_icon.png
new file mode 100644
index 0000000000..fd2bc5b443
Binary files /dev/null and b/res/drawable-hdpi/notification_icon.png differ
diff --git a/res/drawable-hdpi/shared_with_me.png b/res/drawable-hdpi/shared_with_me.png
new file mode 100644
index 0000000000..222172a7d4
Binary files /dev/null and b/res/drawable-hdpi/shared_with_me.png differ
diff --git a/res/drawable-hdpi/shared_with_me_folder.png b/res/drawable-hdpi/shared_with_me_folder.png
new file mode 100644
index 0000000000..271e7b2df0
Binary files /dev/null and b/res/drawable-hdpi/shared_with_me_folder.png differ
diff --git a/res/drawable-hdpi/sharedlink.png b/res/drawable-hdpi/sharedlink.png
new file mode 100644
index 0000000000..a3c42a95fc
Binary files /dev/null and b/res/drawable-hdpi/sharedlink.png differ
diff --git a/res/drawable-hdpi/winter_holidays_icon.png b/res/drawable-hdpi/winter_holidays_icon.png
new file mode 100644
index 0000000000..c1764b6d09
Binary files /dev/null and b/res/drawable-hdpi/winter_holidays_icon.png differ
diff --git a/res/drawable-ldpi-v9/ic_action_create_dir.png b/res/drawable-ldpi-v9/ic_action_create_dir.png
deleted file mode 100644
index 8ed2dae9a9..0000000000
Binary files a/res/drawable-ldpi-v9/ic_action_create_dir.png and /dev/null differ
diff --git a/res/drawable-ldpi-v9/ic_action_settings.png b/res/drawable-ldpi-v9/ic_action_settings.png
new file mode 100644
index 0000000000..e2c2d517f5
Binary files /dev/null and b/res/drawable-ldpi-v9/ic_action_settings.png differ
diff --git a/res/drawable-ldpi-v9/ic_action_upload.png b/res/drawable-ldpi-v9/ic_action_upload.png
deleted file mode 100644
index 2d4ba56fa2..0000000000
Binary files a/res/drawable-ldpi-v9/ic_action_upload.png and /dev/null differ
diff --git a/res/drawable-ldpi/copy_link.png b/res/drawable-ldpi/copy_link.png
new file mode 100644
index 0000000000..b3caf52287
Binary files /dev/null and b/res/drawable-ldpi/copy_link.png differ
diff --git a/res/drawable-ldpi/file.png b/res/drawable-ldpi/file.png
index bbe560bb12..b669fdf403 100644
Binary files a/res/drawable-ldpi/file.png and b/res/drawable-ldpi/file.png differ
diff --git a/res/drawable-ldpi/file_doc.png b/res/drawable-ldpi/file_doc.png
index a4070434a1..0ea07e3b43 100644
Binary files a/res/drawable-ldpi/file_doc.png and b/res/drawable-ldpi/file_doc.png differ
diff --git a/res/drawable-ldpi/file_image.png b/res/drawable-ldpi/file_image.png
index b3af57ca53..1bf20155ad 100644
Binary files a/res/drawable-ldpi/file_image.png and b/res/drawable-ldpi/file_image.png differ
diff --git a/res/drawable-ldpi/file_movie.png b/res/drawable-ldpi/file_movie.png
index 53bf0e7829..e50c1681e8 100644
Binary files a/res/drawable-ldpi/file_movie.png and b/res/drawable-ldpi/file_movie.png differ
diff --git a/res/drawable-ldpi/file_pdf.png b/res/drawable-ldpi/file_pdf.png
index ded8249968..a05afdd5e9 100644
Binary files a/res/drawable-ldpi/file_pdf.png and b/res/drawable-ldpi/file_pdf.png differ
diff --git a/res/drawable-ldpi/file_ppt.png b/res/drawable-ldpi/file_ppt.png
new file mode 100644
index 0000000000..11a9cc960d
Binary files /dev/null and b/res/drawable-ldpi/file_ppt.png differ
diff --git a/res/drawable-ldpi/file_sound.png b/res/drawable-ldpi/file_sound.png
index 6fc963f838..26e5a5feca 100644
Binary files a/res/drawable-ldpi/file_sound.png and b/res/drawable-ldpi/file_sound.png differ
diff --git a/res/drawable-ldpi/file_xls.png b/res/drawable-ldpi/file_xls.png
new file mode 100644
index 0000000000..985536775d
Binary files /dev/null and b/res/drawable-ldpi/file_xls.png differ
diff --git a/res/drawable-ldpi/file_zip.png b/res/drawable-ldpi/file_zip.png
index 04340f4670..88d0040009 100644
Binary files a/res/drawable-ldpi/file_zip.png and b/res/drawable-ldpi/file_zip.png differ
diff --git a/res/drawable-ldpi/ic_action_create_dir.png b/res/drawable-ldpi/ic_action_create_dir.png
index 78356fe139..8ed2dae9a9 100644
Binary files a/res/drawable-ldpi/ic_action_create_dir.png and b/res/drawable-ldpi/ic_action_create_dir.png differ
diff --git a/res/drawable-ldpi/ic_action_settings.png b/res/drawable-ldpi/ic_action_settings.png
new file mode 100644
index 0000000000..c290e5902f
Binary files /dev/null and b/res/drawable-ldpi/ic_action_settings.png differ
diff --git a/res/drawable-ldpi/ic_action_upload.png b/res/drawable-ldpi/ic_action_upload.png
index 9e3f74504f..2d4ba56fa2 100644
Binary files a/res/drawable-ldpi/ic_action_upload.png and b/res/drawable-ldpi/ic_action_upload.png differ
diff --git a/res/drawable-ldpi/ic_menu_archive.png b/res/drawable-ldpi/ic_menu_archive.png
index 7818537cf2..e4d0ee54a7 100644
Binary files a/res/drawable-ldpi/ic_menu_archive.png and b/res/drawable-ldpi/ic_menu_archive.png differ
diff --git a/res/drawable-ldpi/winter_holidays_icon.png b/res/drawable-ldpi/winter_holidays_icon.png
new file mode 100644
index 0000000000..9261d32761
Binary files /dev/null and b/res/drawable-ldpi/winter_holidays_icon.png differ
diff --git a/res/drawable-mdpi-v11/notification_icon.png b/res/drawable-mdpi-v11/notification_icon.png
new file mode 100644
index 0000000000..e33e65355f
Binary files /dev/null and b/res/drawable-mdpi-v11/notification_icon.png differ
diff --git a/res/drawable-mdpi-v9/ic_action_create_dir.png b/res/drawable-mdpi-v9/ic_action_create_dir.png
deleted file mode 100644
index 9215a62540..0000000000
Binary files a/res/drawable-mdpi-v9/ic_action_create_dir.png and /dev/null differ
diff --git a/res/drawable-mdpi-v9/ic_action_settings.png b/res/drawable-mdpi-v9/ic_action_settings.png
new file mode 100644
index 0000000000..47ef3f4429
Binary files /dev/null and b/res/drawable-mdpi-v9/ic_action_settings.png differ
diff --git a/res/drawable-mdpi-v9/ic_action_upload.png b/res/drawable-mdpi-v9/ic_action_upload.png
deleted file mode 100644
index 0faf43b06b..0000000000
Binary files a/res/drawable-mdpi-v9/ic_action_upload.png and /dev/null differ
diff --git a/res/drawable-mdpi/copy_link.png b/res/drawable-mdpi/copy_link.png
new file mode 100644
index 0000000000..4e2af28912
Binary files /dev/null and b/res/drawable-mdpi/copy_link.png differ
diff --git a/res/drawable-mdpi/file.png b/res/drawable-mdpi/file.png
index 0a1ca52dfb..5fa8505f60 100644
Binary files a/res/drawable-mdpi/file.png and b/res/drawable-mdpi/file.png differ
diff --git a/res/drawable-mdpi/file_doc.png b/res/drawable-mdpi/file_doc.png
index 95651f8e23..2e7628a920 100644
Binary files a/res/drawable-mdpi/file_doc.png and b/res/drawable-mdpi/file_doc.png differ
diff --git a/res/drawable-mdpi/file_image.png b/res/drawable-mdpi/file_image.png
index 2b2fff491c..eedd41f1a0 100644
Binary files a/res/drawable-mdpi/file_image.png and b/res/drawable-mdpi/file_image.png differ
diff --git a/res/drawable-mdpi/file_movie.png b/res/drawable-mdpi/file_movie.png
index 4c0254c4e1..b37e98d6bb 100644
Binary files a/res/drawable-mdpi/file_movie.png and b/res/drawable-mdpi/file_movie.png differ
diff --git a/res/drawable-mdpi/file_pdf.png b/res/drawable-mdpi/file_pdf.png
index 306ad99ad7..07aa23805a 100644
Binary files a/res/drawable-mdpi/file_pdf.png and b/res/drawable-mdpi/file_pdf.png differ
diff --git a/res/drawable-mdpi/file_ppt.png b/res/drawable-mdpi/file_ppt.png
new file mode 100644
index 0000000000..db7d58d2a0
Binary files /dev/null and b/res/drawable-mdpi/file_ppt.png differ
diff --git a/res/drawable-mdpi/file_sound.png b/res/drawable-mdpi/file_sound.png
index 8789e5cf6a..6b8b589210 100644
Binary files a/res/drawable-mdpi/file_sound.png and b/res/drawable-mdpi/file_sound.png differ
diff --git a/res/drawable-mdpi/file_xls.png b/res/drawable-mdpi/file_xls.png
new file mode 100644
index 0000000000..b0264d7842
Binary files /dev/null and b/res/drawable-mdpi/file_xls.png differ
diff --git a/res/drawable-mdpi/file_zip.png b/res/drawable-mdpi/file_zip.png
index 92647b83e1..61974b8472 100644
Binary files a/res/drawable-mdpi/file_zip.png and b/res/drawable-mdpi/file_zip.png differ
diff --git a/res/drawable-mdpi/folder_public.png b/res/drawable-mdpi/folder_public.png
new file mode 100644
index 0000000000..374cf91881
Binary files /dev/null and b/res/drawable-mdpi/folder_public.png differ
diff --git a/res/drawable-mdpi/ic_action_create_dir.png b/res/drawable-mdpi/ic_action_create_dir.png
index 636cf0ec06..9215a62540 100644
Binary files a/res/drawable-mdpi/ic_action_create_dir.png and b/res/drawable-mdpi/ic_action_create_dir.png differ
diff --git a/res/drawable-mdpi/ic_action_settings.png b/res/drawable-mdpi/ic_action_settings.png
new file mode 100644
index 0000000000..0eb78f7c73
Binary files /dev/null and b/res/drawable-mdpi/ic_action_settings.png differ
diff --git a/res/drawable-mdpi/ic_action_upload.png b/res/drawable-mdpi/ic_action_upload.png
index d30ee8a830..0faf43b06b 100644
Binary files a/res/drawable-mdpi/ic_action_upload.png and b/res/drawable-mdpi/ic_action_upload.png differ
diff --git a/res/drawable-mdpi/ic_favorite.png b/res/drawable-mdpi/ic_favorite.png
new file mode 100644
index 0000000000..dead4741ac
Binary files /dev/null and b/res/drawable-mdpi/ic_favorite.png differ
diff --git a/res/drawable-mdpi/ic_menu_archive.png b/res/drawable-mdpi/ic_menu_archive.png
index 2c50285186..7f29fbc837 100644
Binary files a/res/drawable-mdpi/ic_menu_archive.png and b/res/drawable-mdpi/ic_menu_archive.png differ
diff --git a/res/drawable-mdpi/notification_icon.png b/res/drawable-mdpi/notification_icon.png
new file mode 100644
index 0000000000..2e8beda678
Binary files /dev/null and b/res/drawable-mdpi/notification_icon.png differ
diff --git a/res/drawable-mdpi/shared_with_me.png b/res/drawable-mdpi/shared_with_me.png
new file mode 100644
index 0000000000..8300eacf45
Binary files /dev/null and b/res/drawable-mdpi/shared_with_me.png differ
diff --git a/res/drawable-mdpi/shared_with_me_folder.png b/res/drawable-mdpi/shared_with_me_folder.png
new file mode 100644
index 0000000000..3b8aeeee70
Binary files /dev/null and b/res/drawable-mdpi/shared_with_me_folder.png differ
diff --git a/res/drawable-mdpi/sharedlink.png b/res/drawable-mdpi/sharedlink.png
new file mode 100644
index 0000000000..772838ad20
Binary files /dev/null and b/res/drawable-mdpi/sharedlink.png differ
diff --git a/res/drawable-mdpi/winter_holidays_icon.png b/res/drawable-mdpi/winter_holidays_icon.png
new file mode 100644
index 0000000000..b0226dce89
Binary files /dev/null and b/res/drawable-mdpi/winter_holidays_icon.png differ
diff --git a/res/drawable-xhdpi-v11/notification_icon.png b/res/drawable-xhdpi-v11/notification_icon.png
new file mode 100644
index 0000000000..1ad49714c9
Binary files /dev/null and b/res/drawable-xhdpi-v11/notification_icon.png differ
diff --git a/res/drawable-xhdpi/copy_link.png b/res/drawable-xhdpi/copy_link.png
new file mode 100644
index 0000000000..c69eb05ae0
Binary files /dev/null and b/res/drawable-xhdpi/copy_link.png differ
diff --git a/res/drawable-xhdpi/ic_favorite.png b/res/drawable-xhdpi/ic_favorite.png
new file mode 100644
index 0000000000..c187f0c138
Binary files /dev/null and b/res/drawable-xhdpi/ic_favorite.png differ
diff --git a/res/drawable-xhdpi/icon.png b/res/drawable-xhdpi/icon.png
new file mode 100644
index 0000000000..041efc6b47
Binary files /dev/null and b/res/drawable-xhdpi/icon.png differ
diff --git a/res/drawable-xhdpi/notification_icon.png b/res/drawable-xhdpi/notification_icon.png
new file mode 100644
index 0000000000..b3855d61a6
Binary files /dev/null and b/res/drawable-xhdpi/notification_icon.png differ
diff --git a/res/drawable-xhdpi/shared_with_me.png b/res/drawable-xhdpi/shared_with_me.png
new file mode 100644
index 0000000000..3879663c8c
Binary files /dev/null and b/res/drawable-xhdpi/shared_with_me.png differ
diff --git a/res/drawable-xhdpi/sharedlink.png b/res/drawable-xhdpi/sharedlink.png
new file mode 100644
index 0000000000..9ef8f3e300
Binary files /dev/null and b/res/drawable-xhdpi/sharedlink.png differ
diff --git a/res/drawable/downloading_file_indicator.png b/res/drawable/downloading_file_indicator.png
index 179a3f75fa..7c495546dd 100644
Binary files a/res/drawable/downloading_file_indicator.png and b/res/drawable/downloading_file_indicator.png differ
diff --git a/res/drawable/ic_favorite.png b/res/drawable/ic_favorite.png
deleted file mode 100644
index 4843dc1f69..0000000000
Binary files a/res/drawable/ic_favorite.png and /dev/null differ
diff --git a/res/drawable/local_file_indicator.png b/res/drawable/local_file_indicator.png
index 08a7b80847..85d5271cc7 100644
Binary files a/res/drawable/local_file_indicator.png and b/res/drawable/local_file_indicator.png differ
diff --git a/res/drawable/uploading_file_indicator.png b/res/drawable/uploading_file_indicator.png
index b0b5634f96..b71add0175 100644
Binary files a/res/drawable/uploading_file_indicator.png and b/res/drawable/uploading_file_indicator.png differ
diff --git a/res/layout-land/account_setup.xml b/res/layout-land/account_setup.xml
index 1025bcff9a..88b1ab3cd8 100644
--- a/res/layout-land/account_setup.xml
+++ b/res/layout-land/account_setup.xml
@@ -27,7 +27,7 @@
@@ -67,7 +67,7 @@
android:text="@string/auth_check_server"
android:visibility="gone" />
-
-
-
-
+
+
+
+
+
+
+
diff --git a/res/layout-v11/activity_row.xml b/res/layout-v11/activity_row.xml
new file mode 100644
index 0000000000..95c7dfc563
--- /dev/null
+++ b/res/layout-v11/activity_row.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout-v11/notification_with_progress_bar.xml b/res/layout-v11/notification_with_progress_bar.xml
new file mode 100644
index 0000000000..f4d4fab398
--- /dev/null
+++ b/res/layout-v11/notification_with_progress_bar.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/account_setup.xml b/res/layout/account_setup.xml
index d147780d69..e3321f94d4 100644
--- a/res/layout/account_setup.xml
+++ b/res/layout/account_setup.xml
@@ -54,7 +54,7 @@
android:visibility="gone" />
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/failed_upload_files.xml b/res/layout/failed_upload_files.xml
deleted file mode 100644
index b4deeed3c7..0000000000
--- a/res/layout/failed_upload_files.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/res/layout/failed_upload_message_view.xml b/res/layout/failed_upload_message_view.xml
deleted file mode 100644
index cf20544552..0000000000
--- a/res/layout/failed_upload_message_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/file_download_fragment.xml b/res/layout/file_download_fragment.xml
index f8818471ed..8f571dc72f 100644
--- a/res/layout/file_download_fragment.xml
+++ b/res/layout/file_download_fragment.xml
@@ -16,6 +16,7 @@
along with this program. If not, see .
-->
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/list_fragment.xml b/res/layout/list_fragment.xml
index 56e869cf14..160edc1d53 100644
--- a/res/layout/list_fragment.xml
+++ b/res/layout/list_fragment.xml
@@ -17,27 +17,44 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-->
-
+ android:layout_weight="1" >
-
-
-
+
+
+
+
+
+
+ android:visibility="gone" >
-
+
+
+
+
+
+
+
diff --git a/res/layout/list_item.xml b/res/layout/list_item.xml
index ea73832832..a4113de7cd 100644
--- a/res/layout/list_item.xml
+++ b/res/layout/list_item.xml
@@ -25,43 +25,44 @@
android:layout_height="56dp">
-
+
+ android:layout_width="32dp"
+ android:layout_height="32dp"
+ android:layout_gravity="center_vertical"
+ android:layout_marginLeft="22dp"
+ android:src="@drawable/local_file_indicator" />
-
-
+
-
+
-
+
+
+
+
+
+
+
+
+
-
-
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/notification_with_progress_bar.xml b/res/layout/notification_with_progress_bar.xml
new file mode 100644
index 0000000000..1df31dc5b1
--- /dev/null
+++ b/res/layout/notification_with_progress_bar.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/preview_image_activity.xml b/res/layout/preview_image_activity.xml
index 9f8b119604..d712b7f41d 100644
--- a/res/layout/preview_image_activity.xml
+++ b/res/layout/preview_image_activity.xml
@@ -21,7 +21,7 @@
android:layout_height="match_parent"
android:orientation="vertical" >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/layout/ssl_untrusted_cert_layout.xml b/res/layout/ssl_untrusted_cert_layout.xml
new file mode 100644
index 0000000000..6a30c2e0ad
--- /dev/null
+++ b/res/layout/ssl_untrusted_cert_layout.xml
@@ -0,0 +1,460 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/ssl_validator_layout.xml b/res/layout/ssl_validator_layout.xml
index 9da017bb03..27204a2ba6 100644
--- a/res/layout/ssl_validator_layout.xml
+++ b/res/layout/ssl_validator_layout.xml
@@ -79,7 +79,7 @@
android:layout_width="wrap_content"
android:layout_height="180dp">
-
-
+ /-->
diff --git a/res/menu/account_picker.xml b/res/menu/account_picker.xml
deleted file mode 100644
index 8532600c70..0000000000
--- a/res/menu/account_picker.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/res/menu/file_actions_menu.xml b/res/menu/file_actions_menu.xml
index 1aa2823e6f..b60d542cd5 100644
--- a/res/menu/file_actions_menu.xml
+++ b/res/menu/file_actions_menu.xml
@@ -19,13 +19,17 @@
-->
diff --git a/res/menu/main_menu.xml b/res/menu/main_menu.xml
index 538dde76c1..b73832293d 100644
--- a/res/menu/main_menu.xml
+++ b/res/menu/main_menu.xml
@@ -17,12 +17,45 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-->
-
+
\ No newline at end of file
diff --git a/res/values-af-rZA/strings.xml b/res/values-af-rZA/strings.xml
index d037a07edd..6ea41913df 100644
--- a/res/values-af-rZA/strings.xml
+++ b/res/values-af-rZA/strings.xml
@@ -4,4 +4,8 @@
Hulp
Gebruikersnaam
Wagwoord
+ OK
+ Kanseleer
+
+ Kies
diff --git a/res/values-ak/strings.xml b/res/values-ak/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-ak/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-am-rET/strings.xml b/res/values-am-rET/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-am-rET/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index cbda0e71d0..4d89b57607 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -2,86 +2,253 @@
%1$s تطبيق أندرويد
الإصدار %1$s
+ تØديث الØساب
رÙع
Ù…Øتويات من تطبيقات أخرى
الملÙات
- إنشاء دليل
- تعديلات
+ ÙØªØ Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù…
+ مجلد جديد
+ إعدادات
+ تÙاصيل
+ أرسل
عام
المزيد
Øسابات
+ إدارة الØسابات
+ كلمة سر التطبيق
+ Øماية العميل
+ رÙع الصورة مباشرة
+ رÙع صورة المؤخذة عبر الكاميرا
+ رÙع Ùيديو مباشرة
+ رÙع Ùيديو مباشرة من الكاميرا
+ تÙعيل الدخول
+ يستخدم هذا لتسجيل المشاكل
+ تاريخ الدخول
+ هذا يعرض السجلات المسجلة
+ Øذ٠التاريخ
المساعدة
+ توصية الى صديق
+ ملاØظات
الدمغة.
- عنوان الخادم
+ جرب %1$s على جهازك الذكي
+ تØقق من الخادم
+ عنوان الخادم https://…
إسم المستخدم
- كلمات السر
- جديد لـ %1$s ؟
+ كلمة السر
+ جديد ÙÙŠ %1$s ØŸ
الملÙات
اتصال
- إرÙع
- لم يتم العثور أي Øساب
- لا يوجد جسابات للـ %1$s ÙÙŠ جهازك. يرجى إعداد Øساب أولاَ.
- إعداد
+ رÙع
+ اختر مجلد الرÙع
+ لم يتم العثور على أي Øساب
+ لا توجد Øسابات %1$s على جهازك. يرجى تهيئة Øساب أولاً.
+ تهيئة
خروج
- لا يوجد Ù…Øتويات للرÙع
- لم يتم استلام أي Ù…Øتويات.
- %1$s غير Ù…Ø³Ù…ÙˆØ Ù„Ù‡ بالوصول للمØتوى المشترك
+ لا يوجد Ù…Øتوى للرÙع
+ لم يتم استلام أي Ù…Øتوى. لا شيء للرÙع.
+ %1$s غير Ù…Ø³Ù…ÙˆØ Ù„Ù‡ بالوصول للمØتوى المشارك
يتم الرÙع
+ لا يوجد شيء هنا. إرÙع بعض الملÙات!
+ جاري التØميل ...
اضغظ على المل٠ليتم عرض خيارات أكثر
- الØجم
- النوع
- عÙدل
- انزال
+ الØجم :
+ النوع :
+ انشئ ÙÙŠ :
+ عÙدل ÙÙŠ :
+ تØميل
+ تØديث الملÙ
تم تغيير اسم المل٠إلى %1$s أثناء الرÙع
+ شارك الرابط
+ الغاء مشاركة الرابط
نعم
لا
تم
- إلغاء رÙع الملÙات
- الغاء
+ إلغاء التØميل
+ إلغاء الرÙع
+ إلغاء
+ ØÙظ + خروج
خطأ
- Øدث خطأ غير معروÙ.
+ تØميل ...
+ خطأ غير معروÙ.
Øول
عدل كلمة السر
Øذ٠الØساب
Øساب جديد
- رÙع من
- يتم الرÙع
+ الرÙع من ...
+ اسم المجلد
+ يتم الرÙع ...
%1$d%% رÙع %2$s
تم الرÙع بنجاØ
تم رÙع %1$s بنجاØ
- عملية الرÙع Ùشلت
- رÙع %1$s قد لا يكون كاملاً
- يتم التØميل
- %1$d%% تنزيل %2$s
+ Ùشل الرÙع
+ لم يكتمل رÙع %1$s
+ Ùشل الرÙع, تØتاج للدخول مرة أخرى
+ يتم التØميل ...
+ %1$d%% تØميل %2$s
+ تم التØميل بنجاØ
تم تØميل %1$s بنجاØ
Ùشل التØميل
- تØميل %1$s قد لا يكون كاملاَ
- اختر Øساب
- تعذر إكمال التزامن لـ %1$s
+ لم يكتمل تØميل %1$s
+ لم يتم تØميلها بعد
+ Ùشل التØميل, تØتاج للدخول مرة أخرى
+ اختر Øسابا
+ Ùشلت المزامنة.
+ لم تكتمل مزامنة %1$s
كلمة السر غير صالØØ© لـ %1$s
- جهات الاتصال لـ %1$d لا يمكن مزامنتها ( %2$d تعارض)
+ هناك تعارض
+ لم ØªÙ†Ø¬Ø Ø§Ù„Ù…Ø²Ø§Ù…Ù†Ø© الدائمة لـ %1$d ملÙات
+ لم ØªÙ†Ø¬Ø Ø§Ù„Ù…Ø²Ø§Ù…Ù†Ø© التلقائية للملÙات
+ لا يمكن مزامنة جهات اتصال %1$d ( %2$d تعارض)
+ تم نسيان بعض الملÙات المØلية
+ %1$d لا يمكن نسخها داخل المجلد %2$s الملÙات الخارجه من المجلد
+ لا يوجد مجلد %1$s بعد الان
نقل الكل
تم نقل جميع الملÙات
- بعض الملÙات لا يمكن نقلها
- لا يوجد مساØØ© كاÙية لنسخ الملÙات المØددة لمجلد %1$s . هل ترغب بنقلهم للمجلد بدلاَ من ذلك؟
- Ùضلا, ادخل كلمة السر
- %1$s مشغل الموسيقى
- %1$s (عرض)
- %1$s (تØميل)
- تم الانتهاء من تشغيل %1$s
+ لم ÙŠÙ†Ø¬Ø Ù†Ù‚Ù„ بعض الملÙات
+ Ù…Øلي :%1$s
+ خارجي : %1$s
+ لا يوجد مساØØ© كاÙية لنسخ الملÙات المØددة لمجلد %1$s . هل ترغب بنقلهم بدلاً من ذلك؟
+ يرجى إدخال كلمة السر
+ أدخل كلمة السر
+ سيتم طلب PIN ÙÙŠ كل مرة يتم Ùيها تشغيل التطبيق
+ يرجى إدخال كلمة السر مرة أخرى
+ إزالة كلمة السر
+ كلمتا السر غير متطابقتين
+ كلمه السر غير صØÙŠØØ©
+ تمت إزالة كلمه السر
+ تم تسجيل كلمت السر
+ مشغل الموسيقى %1$s
+ %1$s (يتم التشغيل)
+ %1$s (يتم التØميل)
+ انتهى تشغيل %1$s
+ لا يوجد مل٠وسائط
+ لم يتم تقديم أي Øساب
+ المل٠ليس ÙÙŠ Øساب صØÙŠØ
+ ترميز غير مدعّم
+ لا يمكن قراءة مل٠الوسائط
+ المل٠غير مرمز بشكل صØÙŠØ
+ انتهت المهلة أثناء Ù…Øاولة العرض
+ لا يمكن بث مل٠الوسائط
+ لا يمكن عرض مل٠الوسائط مع عارض الوسائط المستعمل
+ خطا امني اثناء Ù…Øاولة عرض %1$s
+ خطا ÙÙŠ المدخلات اثناء Ù…Øاولة عرض %1$s
+ خطا غير متوقع اثناء Ù…Øاولة عرض %1$s
+ زر الترجيع
+ زر التشغيل أو الإيقاÙ
+ زر التقدم للأمام
+ التأكد من الموثوقية
+ Ù…Øاولة الدخول ...
لا يتوÙر اتصال
الاتصال الآمن غير متاØ
- يتم إنشاء الاتصال
- Øدث خطأ غير معروÙ
- لا يمكن إنشاء اتصال
- تم إنشاء اتصال آمن
- إعادة تسميه
- الغى
- هل تود Øقاَ إزالة %1$s ØŸ
- هل ترغب ÙÙŠ إزالة %1$s Ùˆ جهات الاتصال التابعة له؟
- Øذ٠من الخادم
- يتم الØذ٠بنجاØ
- لقد Ùشل الØØ°Ù
- Ùضلاً, انتظر
+ تم الاتصال
+ اختبار الاتصال ...
+ إعداد الخادم غير صØÙŠØØ©
+ الØساب لنÙس المستخدم والخادم موجود مسبقا على الجهاز
+ المستخدم المدخل لا يتواÙÙ‚ مع المستخدم الموجود ÙÙŠ الØساب
+ Øدث خطأ غير معرو٠!
+ Ùشل ÙÙŠ العثور على المضيÙ
+ لم يتم إيجاد الخادم
+ الخادم أخذ كثيرا من الوقت للرد
+ رابط غير سليم
+ Ùشل ÙÙŠ تهيئة SSL
+ لا يمكن التØقق من هوية خادم SSL
+ إصدار الخادم غير معروÙ
+ لم ÙŠÙ†Ø¬Ø Ø§Ù„Ø§ØªØµØ§Ù„
+ Ù†Ø¬Ø Ø§Ù„Ø§ØªØµØ§Ù„ آمن
+ اسم المستخدم أو كلمة المرور خاطئة
+ Ùشل ÙÙŠ التØقق
+ تم رÙض الوصول من قبل الخادم المرخص
+ Øالة غير متوقعة: الرجاء, ادخال عنوان الخادم مرة اخرى
+ مدة التØقق انتهت , يرجى اعادة التØقق
+ يرجى ادخال كلمة المرور الØالية
+ مدة الجلسة انتهت , يرجى اعادة الاتصال
+ يتم الاتصال بالخادم للتØقق
+ الخادم لا يدعم طريقة التØقق هذه
+ %1$s لا يدعم الØسابات المتعددة
+ الخادم الخاص بك لم يعد الإتصال بهويتك الصØÙŠØØ©, الرجاء الإتصال بالمسؤول
+
+ لا يمكن المصادقة من الخادم
+ جعل المل٠مØدثا
+ إعادة التسمية
+ ØØ°Ù
+ هل تريد Øقاً ØØ°Ù %1$s ØŸ
+ هل ترغب ÙÙŠ ØØ°Ù %1$s Ùˆ جهات الإتصال التابعة له؟
+ Ù…Øليا Ùقط
+ المØتويات المØلية Ùقط
+ الØذ٠من الخادم
+ Ù…Øليا Ùˆ عن بعد
+ تم الØذ٠بنجاØ
+ Ùشل الØØ°Ù
+ أدخل اسما جديدا
+ لم ØªÙ†Ø¬Ø Ø¥Ø¹Ø§Ø¯Ø© تسمية النسخة المØلية، جرب اسما آخر
+ لم تكتمل إعادة التسمية
+ لا يمكن التØقق من المل٠الخارجي
+ تمت مزامنة Ù…Øتويات الملÙات من قبل
+ لايمكن إنشاء المجلد
+ رموز ممنوعة: / \\ < > : \" | ? *
+ إسم المل٠لا يمكن أن يكون Ùارغاً
+ انتظر للØظة
+ خطا غير متوقع : الرجاء اختيار المل٠من تطبيق آخر
لم يتم اختيار أي ملÙ
+ ارسل الرابط الى ...
+ تسجيل الدخول باستخدام oAuth2
+ الاتصال مع خادم oAuth2
+ لا يمكن التØقق من هوية الموقع
+ شهادة الخادم غير موثوقة
+ شهادة الخادم منتهية الصلاØية
+ وقت صلاØية شهادة الخادم لم ÙŠØÙ† بعد
+ الرابط لا يواÙÙ‚ اسم المضي٠ÙÙ‰ شهاده الØماية
+ هل تريد أن تثق ÙÙŠ هذه الشهادة على اي Øال ØŸ
+ لم ÙŠÙ†Ø¬Ø ØÙظ الشهادة
+ تÙاصيل
+ إخÙاء
+ أصدرت لـ :
+ أصدرت بواسطة
+ الاسم الشائع :
+ منظمة :
+ الوØدة التنظيمية :
+ البلد :
+ الØالة :
+ المكان :
+ الصلاØية :
+ من :
+ إلى :
+ التوقيع :
+ الخوارزمية :
+ لا يمكن إظهار الشهادة
+ - لا معلومات عن الخطأ.
+ هذه مساØØ© Ù…Øجوزة
+ placeholder.txt
+ صورة PNG
+ 389 KB
+ 2012/05/18 12:23 مساء
+ 12:23:45
+ رÙع الصور من خلال الـ WiFi Ùقط
+ رÙع Ùيديو عبر الواي Ùاي Øصراً
+ /InstantUpload
+ تعارض ÙÙŠ التØديث
+ المل٠%s غير
+ الاØتÙاظ بالنسختين
+ استبدال
+ عدم الرÙع
+ معاينة الصورة
+ لا يمكن عرض هذه الصورة
+ %1$s تعذر نسخه %2$s للمجلد المØلي
+ عذراً, المشاركة غير متاØØ© ÙÙŠ الخادم الخاص بك. الرجاء الإتصال
+ بالمسؤول.
+ Øدث خطأ ما أثناء Ù…Øاولة مشاركة هذا المل٠أو المجلد
+ Øدث خطأ ما أثناء Ù…Øاولة إلغاء مشاركة هذا المل٠أو المجلد
+ أرسل
+ نسخ الرابط
+ تم النسخ للØاÙظة
+ خطأ Øرج: لا يمكن تنÙيذ العمليات
+ Øدث خطأ أثناء الإتصال مع الخادم.
+ Øدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية
+ Øدث خطأ أثناء إنتظار الخادم، لم يكن من الممكن القيام بالعملية
+ تعذر إكمال العملية، الخادم غير متوÙر
+
+ Øسابات
+ كلمة مرور خاطئة
+ اختيار
+ الأمان
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
new file mode 100644
index 0000000000..b037311c56
--- /dev/null
+++ b/res/values-az/strings.xml
@@ -0,0 +1,221 @@
+
+
+ %1$s Android Programlar
+ versiya %1$s
+ Yenilənmə hesabı
+ Serverə yüklə
+ Digər porgramların kontenti
+ Fayllar
+ Bunula aç
+ Yeni qovluq
+ Quraşdırmalar
+ Detallar
+ Göndər
+ Ãœmumi
+ Daha da
+ Hesablar
+ İstifadəçilərin idarəedilməsi
+ Proqram təminatının PİN-i
+ Müştərini qoru
+ Ani şəkil yükləmələri
+ Kamera vasitəsi ilə götürülmüş şəkillərin tez yüklənməsi
+ Ani video yükləmələri
+ Kamera vasitəsi ilə yazılmış videoların tez yüklənməsi
+ Jurnallamanın işə salınması
+ Bu problemlərin jurnal edilməsi üçün istifadə edilir
+ Jurnalların Tarixçəsi
+ Bu, yazılmış jurnalları göstərir
+ Tarixçəni sil
+ Kömək
+ Dostuna məsləhət gör
+ GeriyÉ™ cavab
+ İşarələmək
+ %1$s-i ağıllı telefonunuzda yoxlayın!
+ Mən sizi öz smartfonunuzda %1$s istifadə etmək üçün dəvət etmək istəyirəm! Burdan endirin: %2$s
+ Serveri yoxla
+ Server ünvanı https://…
+ İstifadəçi adı
+ ÅžifrÉ™
+ Yeni edək %1$s?
+ Fayllar
+ QoÅŸul
+ Serverə yüklə
+ Yüklənmə qovluöunu seçin:
+ Hesab tapılmadı
+ Sizin alətinizda %1$s hesabi tapılmadı. Xahiş olunur öncə hesabi quraşdırasınız.
+ Qurulum
+ Çıx
+ Yükləmək üçün kontent yoxdur
+ Heç bir kontent gəlmədi. Yukləmək üçün heçnə yoxdur.
+ %1$s yayımlanmış kontent üçün yetkili deyil
+ Yüklənmə gedir
+ Burda heçnə yoxdur. Nese yükləyin!
+ Yüklənir...
+ Bu qovluqda heç bir fayl movcud deyil.
+ Faylın üstünə sıxın ki, əlavə məlumat ekrana çıxsın.
+ Həcm:
+ Tip:
+ Yaradıldı:
+ Dəyişdirildi:
+ Yüklə
+ Faylı yenilə
+ Yüklənmə müddətində fayl buna %1$s yeniləndi
+ Linki yayımla
+ Link yayımlanmasını dayandır
+ Bəli
+ Xeyir
+ Oldu
+ Endirimi dayandır
+ Yüklənməni dayandır
+ Dayandır
+ Saxla & Çıx
+ Səhv
+ Yüklənir...
+ Bəlli olmayan səhv baş verdi
+ Haqqında
+ Şifrəni dəyiş
+ Hesabı sil
+ Hesab yarat
+ Burdan yüklə ...
+ Qovluq adı
+ Yüklənmə gedir ...
+ %1$d%% Yüklənmə gedir %2$s
+ Uğurla yükləndi
+ %1$s uğurla yüklənmişdir
+ Yüklənmədə səhv baş verdi
+ %1$s yüklənməsi bitə bilməz
+ Yüklənmədə səhv baş verdi, siz yenidən daxil olmalısınız
+ Endirilir ...
+ %1$d%% Endirilir %2$s
+ Endirim uÄŸurla bitdi
+ %1$s uÄŸurla endirildi
+ Endirim olmadı
+ %1$s endirimi bitə bilməz
+ Hələ endirilməyib
+ Endirmədə səhv, siz yenidən daxil olmalısınız
+ Hesabı seç
+ Sinxronizasiyada səhv oldu
+ Sinxronizasiyada səhv oldu, siz yenidən daxil olmalısınız
+ %1$s sinxronizasiyası bitə bilməyəcək
+ %1$s üçün yalnış şifrə
+ Konflikt tapıldı
+ %1$d sinxronizasiyada olan fayllar sinxronizasiya edilə bilməz
+ Sinxronizasiyada saxlanılan fayllarda səhv baş verdi
+ %1$d fayllarin kontentləri sinxronizasiya edilə bilməz (%2$d konfliktdədir)
+ Bəzi lokal fayllar unudulmuşdur
+ %1$d faylları %2$s qovluğundan kənardadır və qovluğun daxilinə nüsxələnə bilməz
+ 1.3.16 versiyasından başlayaraq, bu alətdən nüsxələnən fayllar daxili %1$s qovluğuna nüsxələnmişdir ki, bir fayl bir neçə hesabla sinxronizasiya edildikdə, data itkisinin qarşısı alınsın.
+
+Bu dəyişikliklə bağlı, bu proqramın öncəki versiyasında yüklənmiş olan fayllar %2$s qovluğuna nüsxələnmişdir. Ancaq bu hesabın sinxronizasiyası zamanı səhv baş vermişdir.\n\nSiz ya fayl(ları) saxlaya və %3$s üçün linki silə bilər, yada fayl(ları) %1$s qovluğuna köçürə və linki %4$s -ə saxlaya bilərsiniz.
+
+Aşağıda göstərilən %5$s-də olan daxili və xarici fayl(lar) link edilmişdir.
+ %1$s qovluğu heç bir yerdə mövcud deyil
+ Hamısını köçür
+ Bütün fayllar köçürüldü
+ Bəzi fayllar köçürülə bilməz
+ Daxili: %1$s
+ Uzaq: %1$s
+ Seçdiyiniz faylların %1$s qovluÄŸuna köçüçrülmÉ™si üçün kifayÉ™t qÉ™dÉ™r yer yoxdur. ÆvÉ™zinÉ™ onları köçürmÉ™k istÉ™yirsinizmi?
+ Xahiş olunur öz proqramınızın PİN-ni daxil edəsiniz
+ Proqramınızın PİN-ni daxil edin
+ Proqram hər dəfə işə düşdükdə PİN yenidən istəniləcək
+ Öz proqramınızn PİN-ni yenidən daxil etməyi xahiş edirik
+ Öz proqramınızın PİN-ni silin
+ Proqram PİN-ləri eyni deyil
+ Yalnış proqram PİN-i
+ Proqram PÄ°N-i silindi
+ Proqram PİN-i saxlanıldı
+ %1$s musiqi oxuducusu
+ %1$s (oxuyur)
+ %1$s (yüklənir)
+ %1$s geriyÉ™ oxunuÅŸ bitib
+ Media faylı tapılmadı
+ Heç bir hesab təqdim edilməyib
+ Fayl keçərli hesabda deyil
+ Media kodeki dəstəklənmir
+ Media fayl oxunula bilmir
+ Media fayl düzgün kodlaşdırılmayıb
+ İşə salınmanın gözləmə vaxtı bitdi
+ Media faylı axınlı ola bilməz
+ Media faylı anbarda olan media oxuyucusu ilə işlədilə bilmız
+ Oynamaya çalışarkən təhlükəsizlik xətası %1$s
+ Oynamaya çalışarkən daxiletmə xətası %1$s
+ Oynamaya çalışarkən gözlənilməyən xəta %1$s
+ Geriyə qayıdış düyməsi
+ Oxunma və ya tənəffüs düyməsi
+ Sürətlə irəli düyməsi
+ Yetki alınır...
+ Girişə cəhd edilir...
+ Şəbəkə qoşulması yoxdur
+ Təhlükəsiz qoşulma mümkün deyil.
+ ÆlaqÉ™ quruldu
+ QoÅŸulma test edilir...
+ Yalnış qurulmuş server konfiqurasiyası
+ Avadanlıqda eyni istifadəçi və server üçün artıq hesab mövcuddur
+ Daxil edilən hesab bu hesabla üst-üstə düşmür
+ Yalnış səhv baş verdi!
+ Host-u tapmaq mümkün olmadı
+ Server nüsxəsi tapılmadı
+ Server cavab üçün çox uzun müddət aldı
+ Xətalı URL
+ SSL inisializasiyası səhvi
+ SSL serverin şəxsiliyini təyin etmək mümkün olmadı
+ Təyin edilməyən server versiyası
+ Qoşulma yaratmaq mümkün olmadı
+ Təhlükəsiz qoşulma yaradıldı
+ Yalnış istifadəçi yada şifrə
+ Uğursuz yetkiləndirmə
+ Yetkiləndirmə serveri tərəfindən giriş əngəlləndi
+ Bəlli ediləbilməyən vəziyyət; xahiş olunur, serverin URL-ni yenidən daxil edəsiniz
+ Sizin yetinizin vaxtı bitmişdir. Xahiş olunur, yenidən yetkilənəsiniz
+ Xahiş olunur, hazırki şifrəni daxil edəsiniz
+ Sizin sessiyanın vaxtı bitmişdir. Xahiş olunur yenidən qoşulasınız
+ Yetkiləndirmə serverinə qoşulma gedir...
+ Server bu qeydiyyat metodikasını dəstəkləmir
+ %1$s çoxlu hesab dəstəkləmir
+ Sizin server düzgün istifadəçi id-si qaytarmır, xahiş olunur inzibatçı ilə əlaqə saxlayasınız
+ Bu serverdə yenidən qeydiyyatdan keçmək olmur
+ Faylı gündəmdə saxla
+ Adı dəyiş
+ Sil
+ Siz həqiqətən %1$s silmək istəyirsiniz?
+ Siz həqiqətəndə %1$s və onun kontentini silmək istəyirsiniz?
+ Yalnız daxili
+ Yalnız daxili kontent
+ Serverdən sil
+ Uzaq vÉ™ lokal
+ SilmÉ™ uÄŸurlu oldu
+ Silmək mümkün olmadı
+ Yeni adı daxil edin
+ Daxili nüsxənin adı dəyişdirilə bilməz; fərqli ad yoxlayın
+ Ad dəyişmə bitə bilməz
+ Uzaq fayl yoxlanıla bilməz
+ Faylın kontenti artıq sinxronizasiya edilmişdir
+ Qovluq yaradıla bilməz
+ QadaÄŸan edilmiÅŸ simvollar: / \\ < > : \" | ? *
+ Faylın adı boş ola bilməz
+ Biraz gözləyin
+ Naməlum problem; xahiş olunur faylı fərqli program təminatından seçəsiniz
+ Heç bir fayl seçilməyib
+ Linki yollayın ...
+ oAuth2 ilə qeydiyyatdan keçin
+ oAuth2 serverinÉ™ qoÅŸulur...
+ Sayta olan identifikasiya yoxlanıla bilməz
+ Server sertifikati inamlı deyil
+ - Server sertifikatının vaxtı bitmişdir
+ - Server sertifikatının düzgün tarixi gələcəkdədir
+ Detallar
+ Bu fayl və ya qovluğun yayımlanmasının dayandırılmasında səhv baş verdi
+ Göndər
+ linki nüsxələ
+ Mübadilə buferinə nüsxələndi
+
+ Sizin yetkiniz yoxdur %s
+ bu faylı silmək üçün
+ bu faylı yayımlamaq üçün
+ fayl yaratmaq üçün
+ bu qovluğa yükləmək üçün
+ Hesablar
+ Hesab əlavə et
+ Yalnış şifrə
+
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index c757504ac2..42e20789ca 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -1,2 +1,10 @@
-
+
+ Ðалады
+ Так
+ Ðе
+ Добра
+ Памылка
+
+ Выбар
+
diff --git a/res/values-bg-rBG/strings.xml b/res/values-bg-rBG/strings.xml
index c84d7057ba..47d243cf46 100644
--- a/res/values-bg-rBG/strings.xml
+++ b/res/values-bg-rBG/strings.xml
@@ -1,78 +1,281 @@
+ %1$s Android приложение
+ верÑÐ¸Ñ %1$s
+ ОбновÑване на профила
Качване
Съдържание от други приложениÑ
Файлове
- Ðова директориÑ
+ ОтварÑне Ñ
+ Ðова папка
ÐаÑтройки
+ Детайли
+ Изпращане
Общи
Още
Профили
- Своевременно качване на Ñнимки направени Ñ ÐºÐ°Ð¼ÐµÑ€Ð°Ñ‚Ð°
+ Управление на профилите
+ App PIN
+ ПодÑигури програмата
+ Ðезабавно качване на Ñнимки
+ Ðезабвано качване на Ñнимки направени Ñ ÐºÐ°Ð¼ÐµÑ€Ð°Ñ‚Ð°
+ Ðезабавно качване на видео
+ Ðезабавно качване на видеота запиÑани от камерата.
+ Включване на доклади
+ Използва Ñе за докладване на проблеми
+ ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ð° докладите
+ Показва запазените доклади
+ Изтриване на иÑториÑта
Помощ
- ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñървъра
+ Препоръчай на приÑтел
+ Обратна Връзка
+ Imprint
+ Опитай %1$s на Ñмартфона Ñи!
+ Бих желал да те Ð¿Ð¾ÐºÐ°Ð½Ñ Ð´Ð° ползваш %1$s на ÑÐ²Ð¾Ñ Ñмартфон!\nÐ˜Ð·Ñ‚ÐµÐ³Ð»Ð¸Ñ Ñ Ð¾Ñ‚ тук:%2$s
+ Проверка на Ñървъра
+ ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñървъра https://…
Потребител
Парола
+ Ðов в %1$s?
Файлове
Свързване
Качване
+ Избери папка за качване:
ÐÑма открит профил
- ИнÑталиране
+ ÐÑма %1$s профили на уÑтройÑтото ти. МолÑ, първо наÑтрой профил.
+ ÐаÑтройка
Изход
ÐÑма Ñъдържание за качване
Ðе беше получено Ñъдържание. ÐÑма какво да Ñе качи.
+ %1$s нÑма разрешен доÑтъп до Ñподеленото Ñъдържание.
Качване
- ÐатиÑнете върху файл за да видите повече информациÑ.
+ Тук нÑма нищо. Качете нещо!
+ Зареждане...
+ ÐÑма файлове в тази папка.
+ ÐатиÑни върху файл, за да видиш допълнителна информациÑ.
Размер:
Тип:
- Създаден:
- Променен:
+ Създаден на:
+ Променен на:
ИзтеглÑне
+ ОбновÑване на файла
+ Файлът беше преименуван на %1$s по време на качването.
+ Връзка за ÑподелÑне
+ Премахване връзка за ÑподелÑне
Да
Ðе
ОК
- Спри качването
+ Отказване на тегленето
+ Отказване на качването
Отказ
- Запази и Излез
+ Запазване и изход
Грешка
+ Зареждане...
+ Ðепозната грешка
ОтноÑно
- ПромÑна на паролата
- Изтрий акаунт
- Създай акаунт
- Качено от ...
- Име на папка
- Качване ...
+ ПромÑна на парола
+ Изтриване на профила
+ Създаване на профил
+ Качване от...
+ Име на папката
+ Качване...
%1$d%% Качване %2$s
- Качване е уÑпешно
- Качването е неуÑпешно
- Качването на %1$s не може да бъде завършено
- СвалÑне ...
+ Качването е уÑпешно.
+ %1$s е уÑпешно качен.
+ Качването е неуÑпешно.
+ Качването на %1$s не може да бъде завършено.
+ ÐеуÑпешно качване, Ñ‚Ñ€Ñбва да Ñе впишеш отново.
+ ИзтеглÑне...
%1$d%% СвалÑне %2$s
- СвалÑнето е неуÑпешно
- СвалÑнето на %1$s не може да бъде завършено
- Изберете акаунт
- СинхронизациÑте е неуÑпешна
- СинхронизациÑта на %1$s не може да бъде оÑъщеÑтвена
- ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ Ð’Ð°ÑˆÐ¸Ñ App ПИÐ
- ÐÑма мрежова ÑвързаноÑÑ‚
- Защитена връзка не е налична
+ ИзтеглÑнето е уÑпешно.
+ %1$s е уÑпешно изтеглен.
+ ИзтеглÑнето е неуÑпешно.
+ ИзтеглÑнето на %1$s не може да бъде завършено.
+ Ð’Ñе още не е изтеглено
+ ÐеуÑпешно изтеглÑне, Ñ‚Ñ€Ñбва да влезете отново.
+ Изберете профил
+ ÐеуÑпешна ÑинхронизациÑ.
+ ÐеуÑпешно Ñинхронизиране, Ñ‚Ñ€Ñбва да влезете отново.
+ СинхронизациÑта на %1$s не може да бъде завършена.
+ Ðеправилна парола за %1$s.
+ Открити Ñа конфликти
+ %1$d kept-in-sync файла не могат да бъдат Ñихронизирани
+ ÐеуÑпешни Kept-in-sync файлове
+ ÐеуÑпешно Ñинхронизиране на Ñъдържанието на %1$d файла (%2$d конфликта).
+ ÐÑкои локални файлове бÑха забравени.
+ ÐеуÑпешно копиране на %1$d файла в папка %2$s.
+ От верÑÐ¸Ñ 1.3.16 нататък, файлове качени от това уÑтройÑтво ще бъдат копирани в локалната %1$s папка, за да Ñе предотврати загуба на данни, когато един файл е Ñинхронизиран Ñ Ð¼Ð½Ð¾Ð³Ð¾ профили.\n\nПоради тази промÑна, вÑички файлове качени Ñ Ð¿Ñ€ÐµÐ´Ð¸ÑˆÐ½Ð¸ верÑии на тази програма бÑха копирани в папка %2$s. За жалоÑÑ‚, грешка по време на ÑинхрноизцаиÑта попречи на тази Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð´Ð° бъде завършена. Можеш или да оÑтавиш файла(овете), както Ñа и да премахнеш връзката до %3$s, или да премеÑтиш файла(овете) в папка %1$s и да запазиш връзката до %4$s.\n\nИзброени по-долу Ñа локалните файл(ове), и отделечените файл(ове), до които Ñа били Ñвързани в %5$s.
+ Папка %1$s вече не ÑъщеÑтува
+ ПремеÑтване на вÑички
+ Ð’Ñички файлове Ñа премеÑтени.
+ ÐеуÑпешно премеÑтване на нÑкои файлове.
+ Локален: %1$s
+ Отдалечен: %1$s
+ ÐÑма доÑтатъчно мÑÑто за копирането на избраните файлове до папка %1$s. Да Ñе премеÑÑ‚ÑÑ‚ ли вмеÑто това?
+ Въведете ÑÐ²Ð¾Ñ App ПИÐ
+ Въведете ÑÐ²Ð¾Ñ App ПИÐ
+ ПИÐ-ÑŠÑ‚ ще бъде поиÑкан вÑеки път, когато програмата Ñтартира.
+ Въведете ÑÐ²Ð¾Ñ App ПИРотново.
+ Премахнете ÑÐ²Ð¾Ñ App ПИÐ
+ App ПИÐ-овете не Ñъвпадат
+ Ðеправилен App ПИÐ
+ App ПИРпремахнат
+ App ПИРзапазен
+ %1$s музикален плеър
+ %1$s (пуÑната)
+ %1$s (Ñе зарежда)
+ %1$s пуÑкането завърши
+ Ðе е открит медиен файл.
+ Ðе е зададен профил.
+ Файлът не във валиден профил.
+ Ðеподдържан медиен кодек.
+ ÐеуÑпешно прочитане на медиен файл.
+ Ðеправилно кодиран медиен файл.
+ Отне твърде много време, за да започне пуÑкането.
+ МедийниÑÑ‚ файл не може да бъде излъчен
+ МедийниÑÑ‚ файл не може да бъде пуÑнат ÑÑŠÑ ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð¿Ð»ÐµÑŠÑ€.
+ Грешка по ÑигурноÑта, докато Ñе опитва да пуÑне %1$s.
+ Входно/изходна грешка, докато Ñе опитваше да пуÑне %1$s.
+ Ðеочаквана грешка, докато Ñе опитваше да пуÑне %1$s.
+ Бутон за превъртане
+ Бутон пуÑни / пауза
+ Бутон за превъртане напред
+ Получване на оторизациÑ...
+ Опит за влизане...
+ ÐÑма интернет връзка
+ ÐÑма Ñигурна връзка
ОÑъщеÑтвена връзка
- ПоÑви Ñе неизвеÑтна грешка!
- ÐевъзможноÑÑ‚ за намиране на хоÑта
- Сървърът Ñе забави прекалено много Ñ Ð¾Ñ‚Ð³Ð¾Ð²Ð¾Ñ€Ð°
- Грешен URL
- ИнициализациÑта на SSL е неуÑпешна
- ÐевъзможноÑÑ‚ за оÑъщеÑтвÑване на връзка
- ОÑъщеÑтвена защитена връзка
- Дръж файлът обновен
+ Проверка на ÑвързаноÑÑ‚...
+ Ðеправилно зададена Ñървърна конфигурациÑ.
+ Профил за ÑÑŠÑ‰Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ» на ÑÑŠÑ‰Ð¸Ñ Ñървър е вече наÑтроен на уÑтройÑтвото.
+ ВъведниÑÑ‚ потребител не Ñъвпада Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð½Ð° профила.
+ ÐеизвеÑтна грешка!
+ ÐеуÑпешно намиране на Ñървъра.
+ Сървърът не е открит.
+ Сървърът Ñе забави прекалено много Ñ Ð¾Ñ‚Ð³Ð¾Ð²Ð¾Ñ€Ð°.
+ Грешен URL адреÑ
+ ÐеуÑпешна Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° SSL.
+ ÐеуÑпешна проверка на SSL ÑамоличноÑтта на Ñървъра.
+ ÐеизвеÑтна верÑÐ¸Ñ Ð½Ð° Ñървъра.
+ ÐеуÑпешно оÑъщеÑтвÑване на връзка
+ ОÑъщеÑтвена Ñигурна връзка.
+ Грешно потребителÑко име или парола
+ ÐеуÑпешна оторизациÑ
+ ДоÑтъпът отказан от Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñървър
+ Ðеочаквано ÑÑŠÑтоÑние; въведете URL адреÑа на Ñървъра отново.
+ ОторизациÑта изтече. МолÑ, оторизирайте Ñе отново.
+ Въведете текущата парола
+ СеÑиÑта изтече. МолÑ, Ñвържете Ñе повторно.
+ Свързване Ñ Ð¾Ñ‚Ð¾Ñ€Ð¸Ð·Ð¸Ñ€Ð°Ñ‰Ð¸Ñ Ñървър...
+ Сървърът не поддържа този метод за оторизиране
+ %1$s не поддържа множеÑтво профили
+ ВашиÑÑ‚ Ñървър не връща правилен потребителÑки индентификатор.
+МолÑ, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора.
+ ÐеуÑпешен опит за оторизиране Ñ Ñ‚Ð¾Ð·Ð¸ Ñървър.
+ Поддържане на файла обновен.
Преименуване
Премахване
ÐаиÑтина ли иÑкате да изтриете %1$s ?
+ ÐаиÑтина ли иÑкате да премахнете %1$s и Ñъдържанието му?
Само локално
- Премахни от Ñървъра
- Преименуването не може да Ñе оÑъщеÑтви
+ Само локалното Ñъдържание
+ Премахване от Ñървъра
+ Отдалечено и локално
+ Премахването уÑпешно.
+ ÐеуÑпешно прехамхване.
+ Въведете ново име
+ Локално копие не може да бъде преименувано; опитайте Ñ Ð´Ñ€ÑƒÐ³Ð¾ име
+ ÐеуÑпешно преименуване
+ ÐеуÑпешна проверка на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð».
+ Съдържанието на файла е вече Ñинхронизирано
Папката не може да бъде Ñъздадена
+ Забранени Ñимволи: / \\ < > : \" | ? *
+ Името на файла не може да бъде празно
Изчакайте малко
+ Ðеочакван проблем; молÑ, изберете файла от друга програма.
Ðе е избран файл
- СамоличноÑтта на Ñайта не може да бъде проверена
+ Изпращане на връзката до...
+ ВпиÑване Ñ oAuth2
+ Свързване Ñ Ð¾Ðутх2 Ñървър...
+ СамоличноÑтта на Ñайта не може да бъде проверена.
+ - Сертификатът на Ñървъра не е надежден.
+ - Сертификатът на Ñървъра е изтекъл
+ - Датите на валидноÑÑ‚ на ÑÑŠÑ€Ð²ÑŠÑ€Ð½Ð¸Ñ Ñертификат Ñа в бъдещето.
+ - URL адреÑÑŠÑ‚ не Ñъвпада Ñ Ñ‚Ð¾Ð·Ð¸ Ñертификата.
+ Въпреки вÑичко, иÑкате ли да Ñе доверите на Ñертификата?
+ ÐеуÑпешно запазване на Ñертификата.
+ ПодробноÑти
+ Скриване
+ Издаден на:
+ Издаден от:
+ Познато име:
+ ОрганизациÑ:
+ Отдел в организациÑта:
+ Държава:
+ ОблаÑÑ‚:
+ МеÑтоположение:
+ ВалидноÑÑ‚:
+ От:
+ До:
+ Електронен подпиÑ:
+ Ðлгоритъм:
+ Сертификатът не може да бъде показан.
+ - ÐÑма Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° грешката.
+ Това е за запазване на мÑÑто
+ placeholder.txt
+ PNG Image
+ 389 KB
+ 2012/05/18 12:23 PM
+ 12:23:45
+ Качване на Ñнимки Ñамо през WiFi
+ Качване на видео Ñамо през WiFi
+ /InstantUpload
+ ОбновÑване на конфликтите
+ Ð’ÑŠÐ½ÑˆÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð» %s не е Ñинхронизиран Ñ Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ. Ðко продължите, ще замените Ñъдържанието на файла на Ñървъра.
+ Запазване и на двата
+ ПрезапиÑване
+ Да не Ñе качва
+ Преглед на изображението
+ Изображението не може да бъде показано
+ %1$s не може да бъде копиран в локалната папка %2$s
+ За Ñъжаление ÑподелÑнето не е включено на Ñървъра ви.
+МолÑ, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора.
+ ÐеуÑпешен опит за ÑподелÑне. МолÑ, провери дали файла ÑъщеÑтвува.
+ ÐаÑтъпи грешка при опита за ÑподелÑне на този файл или папка.
+ ÐеуÑпешен опит за прекратÑване на ÑподелÑнето. МолÑ, провери дали файла ÑъщеÑтвува.
+ ÐаÑтъпи грешка при опита за премахване на ÑподелÑнето на този файл или папка.
+ Изпращане
+ Копиране на връзката
+ Копирана
+ Критична грешка: не може да изпълни операциите
+ ÐаÑтъпи грешка при Ñвързването ÑÑŠÑ Ñървъра.
+ ÐаÑтъпи грешка при Ñвързването ÑÑŠÑ Ñървъра, операциÑта не е изпълнена.
+ ÐаÑтъпи грешка при Ñвързването ÑÑŠÑ Ñървъра, операциÑта не е изпълнена.
+ ÐеуÑпешно завършена операциÑ, Ñървърът не е доÑтъпен.
+
+ ÐÑмате разрешен доÑтъп до %s
+ за преименуване на този файл
+ за изтриване на този файл
+ за ÑподелÑне на този файл
+ за премахване ÑподелÑнето на този файл
+ за Ñъздаване на файла
+ за качване в тази папка
+ Файлът вече не Ñе намира на този Ñървър
+ Профили
+ ДобавÑне на профил
+ Доклади
+ Изпрати ИÑториÑ
+ ownCloud Android доклади
+ Зареждане на информациÑ...
+ Ðужна е идентификациÑ
+ Грешна парола
+ ПремеÑти
+ Тук нÑма нищо. Можеш да добавиш папка!
+ Избери
+ ÐеуÑпешно премеÑтване. МолÑ, провери дали файла ÑъщеÑтвува.
+ Ðе е възможно да премеÑтиш папка в нейна под папка.
+ Файлът вече ÑъщеÑтвува в отдалечената папка.
+ ÐаÑтъпи грешка при опита за премеÑтване на този файл или папка.
+ за да премеÑтиш този файл
+ СигурноÑÑ‚
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index a9080e66a9..cae19b70e6 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -1,38 +1,268 @@
+ %1$s অà§à¦¯à¦¾à¦¨à§à¦¡à§à¦°à§Ÿà§‡à¦¡ অà§à¦¯à¦¾à¦ª
+ সংষà§à¦•à¦°à¦¨ %1$s
+ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ নবোদà§à¦¯à¦® কর
আপলোড
+ à¦à¦¿à¦¨à§à¦¨ অà§à¦¯à¦¾à¦ªâ€™à¦à¦° কনটেনà§à¦Ÿ
ফাইল
- ডিরেকà§à¦Ÿà¦°à¦¿ তৈরী কর
+ সহায়তায় খোল
+ নব ফােলডার
নিয়ামকসমূহ
+ বিসà§à¦¤à¦¾à¦°à¦¿à¦¤
+ পাঠাও
সাধারণ
বেশী
à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ
+ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ সামলাও
+ অà§à¦¯à¦¾à¦ª PIN
+ আপনার কà§à¦²à¦¾à§Ÿà§‡à¦¨à§à¦Ÿ সামলান
+ দà§à¦°à§à¦¤ ছবি আপলোড
+ কà§à¦¯à¦¾à¦®à§‡à¦°à¦¾ থেকে তোলা ছবি তৎকà§à¦·à¦£à¦¾à§Ž আপলোড
+ দà§à¦°à§à¦¤ à¦à¦¿à¦¡à¦¿à¦“ আপলোড
+ কà§à¦¯à¦¾à¦®à§‡à¦°à¦¾à§Ÿ রেকরà§à¦¡ করা à¦à¦¿à¦¡à¦¿à¦“ তৎকà§à¦·à¦£à¦¾à§Ž আপলোড
+ লগিং সকà§à¦°à¦¿à§Ÿ কর
+ সমসà§à¦¯à¦¾ তালিকাà¦à§à¦•à§à¦¤ করার জায়গা
+ লগিং ইতিহাস
+ রেকরà§à¦¡à§‡à¦¡ লগ à¦à¦–ানে দেখেন
+ ইতিহাস ডিলিট করেন
সহায়িকা
- সারà§à¦à¦¾à¦° ঠিকানা
+ বনà§à¦§à§à¦° কাছে সà§à¦ªà¦¾à¦°à¦¿à¦¶ করà§à¦¨
+ মতামত
+ পà§à¦°à¦¤à¦¿à¦šà§à¦›à¦¾à¦ª
+ আপনার সà§à¦®à¦¾à¦°à§à¦Ÿà¦«à§‹à¦¨à§‡ %1$s চেষà§à¦Ÿà¦¾ করà§à¦¨!
+ সারà¦à¦¾à¦° চেক করেন
+ সারà¦à¦¾à¦° ঠিকানা https://…
বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à¦¿
কূটশবà§à¦¦
+ %1$s ঠনতà§à¦¨?
ফাইল
সংযà§à¦•à§à¦¤ হও
আপলোড
+ আপলোডের ফোলডার পছনদ করেন
কোন à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ খà§à¦à¦œà§‡ পাওয়া গেল না
+ আপনার ডিà¦à¦¾à¦‡à¦¸à§‡ কোন %1$s à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ নেই। দয়া করে পà§à¦°à¦¥à¦®à§‡ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ খà§à¦²à§à¦¨à¥¤
সেট-আপ
বনà§à¦§
+ আপলোডের কনটেনট নেই
+ কোন কনটেনট আসেনি৷ আপলোডের কনটেনট নেই
+ à¦à¦‡ যৌথ কনটেনà§à¦Ÿ ঠ%1$s à¦à¦° পà§à¦°à¦¬à§‡à¦¶ অনà§à¦®à§‹à¦¦à¦¿à¦¤ নয়
আপলোড করা হচà§à¦›à§‡
+ à¦à¦–ানে কিছà§à¦‡ নেই। কিছৠআপলোড করà§à¦¨ !
+ লোড হচà§à¦›à§‡....
+ à¦à¦‡ ফোলডারে কোন ফাইল নেই
+ অতিরিকà§à¦¤ তথà§à¦¯ পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করতে চাইলে ফাইলে টà§à¦¯à¦¾à¦ª দিন
আয়তনঃ
ধরণঃ
তৈরীর নিরà§à¦˜à¦¨à§à¦Ÿà¦ƒ
পরিবরà§à¦¤à¦¿à¦¤à¦ƒ
ডাউনলোড
+ ফাইল নবোদà§à¦¯à¦® করà§à¦¨
+ আপলোডের সময় ফাইলের পূণঃনামকরণ করা হয়েছে %1$s
+ লিংক à¦à¦¾à¦—াà¦à¦¾à¦—ি করেন
+ লিংক ছিনন করেন
হà§à¦¯à¦¾à¦
না
তথাসà§à¦¤à§
+ ডাউনলোড বাতিল করেন
আপলোড বাতিল কর
বাতিল
সংরকà§à¦·à¦£ কর à¦à¦¬à¦‚ &পà§à¦°à¦¸à§à¦¥à¦¾à¦¨
সমসà§à¦¯à¦¾
+ লোড চলছে....
+ অজানা জটিলতা
+ সমপরকে
কূটশবà§à¦¦ পরিবরà§à¦¤à¦¨ করà§à¦¨
- ডিরেকà§à¦Ÿà¦°à¦¿à¦° নাম
+ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ মূছà§à¦¨
+ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ তেরী কর
+ ফরম আপলোড কর
+ ফোলডারের নাম
+ আপলোড হচছে
+ %1$d%% আপলোড করছে %2$s
+ আপলোড সফল
+ %1$s সফলà¦à¦¾à¦¬à§‡ আপলোড হয়েছে
+ আপলোড হয়নি
+ %1$s আপলোড সমà§à¦ªà¦¨à§à¦¨ করা যায়নি
+ আপলোড হয়নি, আবার লগইন কর
+ ডাউনলোড চলছে...
+ %1$d%% ডাউনলোড করছে %2$s
+ ডাউনলোড সফল
+ %1$s সফলà¦à¦¾à¦¬à§‡ ডাউনলোড হয়েছে
+ ডাউনলোড হয়নি
+ %1$s ডাউনলোড সমà§à¦ªà¦¨à§à¦¨ করা যায়নি
+ à¦à¦–নো ডাউনলোড শেষ হয়নি
+ ডাউনলোড করা যায়নি, আবার লগইন কর
à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ নিরà§à¦¬à¦¾à¦šà¦¨
+ সমনà§à¦¬à§Ÿà¦•à¦°à¦£ বà§à¦¯à¦¾à¦°à§à¦¥
+ সমনà§à¦¬à§Ÿà¦•à¦°à¦£ বà§à¦¯à¦¾à¦°à§à¦¥, আবার লগইন কর
+ %1$s à¦à¦° সমনà§à¦¬à§Ÿà¦•à¦°à¦£ সমà§à¦ªà¦¨à§à¦¨ করা যায়নি
+ %1$s à¦à¦° জনà§à¦¯ অননà§à¦®à§‹à¦¦à¦¿à¦¤ কà§à¦Ÿà¦¶à¦¬à§à¦¦
+ সংঘরà§à¦· দেখা যাচà§à¦›à§‡
+ সমনà§à¦¬à§Ÿ করার জনà§à¦¯ রাখা %1$d ফাইলগà§à¦²à§‹ সমনà§à¦¬à§Ÿ করা যায়নি
+ সমনà§à¦¬à§Ÿ করার জনà§à¦¯ ফাইল রাখা বà§à¦¯à¦¾à¦°à§à¦¥ হয়েছে
+ %1$d ফাইলসমূহের কনটেনà§à¦Ÿ সিনকà§à¦°à§‹à¦¨à¦¾à¦‡à¦œ করা যায়নি (%2$d সংঘরà§à¦·)
+ কিছৠলোকাল ফাইল নেয়া হয়নি
+ %2$s ফোলà§à¦¡à¦¾à¦°à§‡à¦° %1$d ফাইলগà§à¦²à¦¿ কপি করা যায়নি
+ %1$s নামে কোন ফোলà§à¦¡à¦¾à¦° আর নেই
+ সব সরান
+ সব ফাইল সরানো হয়েছে
+ কয়েকটি ফাইল সরানো যায়নি
+ সà§à¦¥à¦¾à¦¨à§€à§Ÿ: %1$s
+ দà§à¦°à¦¬à¦°à§à¦¤à§€: %1$s
+ %1$s ফোলà§à¦¡à¦¾à¦°à§‡ ফাইল কপি করার মত যথেষà§à¦Ÿ জায়গা নেই। à¦à¦—à§à¦²à§‹ অনà§à¦¯à¦¤à§à¦° রাখবেন?
+ দয়া করে আপনার App PIN দিন
+ আপনার App PIN দিন
+ পà§à¦°à¦¤à¦¿à¦¬à¦¾à¦° অà§à¦¯à¦¾à¦ª চালৠকরার সময় PIN à¦à¦° জনà§à¦¯ অনà§à¦°à§‹à¦§ করা হবে
+ দয়া করে আবার App PIN দিন
+ আপনার অà§à¦¯à¦¾à¦ª PIN সরিয়ে নিন
+ অà§à¦¯à¦¾à¦ª PINগà§à¦²à§‹ à¦à¦•à¦°à¦•à¦® নয়
+ অশà§à¦¦à§à¦§ অà§à¦¯à¦¾à¦ª PIN
+ অà§à¦¯à¦¾à¦ª PIN সরানো হয়েছে
+ অà§à¦¯à¦¾à¦ª PIN সংরকà§à¦·à¦£ করা হয়েছে
+ %1$s মিউজিক পà§à¦²à§‡à§Ÿà¦¾à¦°
+ %1$s (বাজানো হচà§à¦›à§‡)
+ %1$s (লোড করা হচà§à¦›à§‡)
+ %1$s পà§à¦²à§‡à¦¬à§à¦¯à¦¾à¦• শেষ
+ কোন মিডিয়া ফাইল নেই
+ কোন à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ পà§à¦°à¦¦à¦¾à¦¨ করা হয়নি
+ ফাইলটি বৈধ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿà§‡à¦° নয়
+ অসমরথিত মিডিয়া কোডেক
+ মিডিয়া ফাইলটি পড়া গেলনা
+ মিডিয়া ফাইল সঠিকà¦à¦¾à¦¬à§‡ encoded নয়
+ বাজাতে যেয়ে টাইম আউট হয়ে গেল
+ মিডিয়া ফাইল সà§à¦Ÿà§à¦°à¦¿à¦® করা যাবেনা
+ সà§à¦Ÿà¦• মিডিয়া পà§à¦²à§‡à§Ÿà¦¾à¦°à§‡ মিডিয়া ফােইল চালানো যাবেনা
+ %1$s চালাতে যেয়ে নিরাপতà§à¦¤à¦¾ à¦à§à¦² হচà§à¦›à§‡
+ %1$s চালাতে যেয়েে ইনপà§à¦Ÿ à¦à§à¦² হচà§à¦›à§‡
+ %1$s চালাতে যেয়ে অবাঞà§à¦šà¦¿à¦¤ à¦à§à¦² হচà§à¦›à§‡
+ পশচাত
+ বাজান/ থামান
+ আগান
+ অনà§à¦®à§‹à¦¦à¦¨ নেয়া হচà§à¦›à§‡....
+ লগইনের চেষটা চলছে..
+ নেটওয়ারà§à¦• সংযোগ নেই
+ নিরাপদ যোগাযোগ পাওয়া গেলনা
+ যোগাযোগ সà§à¦¥à¦¾à¦ªà¦¿à¦¤ হয়েছে
+ যোগাযোগ পরীকà§à¦·à¦¾ করা হচà§à¦›à§‡...
+ সারà§à¦à¦¾à¦°à§‡à¦° কনফিগারেশনে à¦à§à¦² রয়েছে
+ à¦à¦‡ যনà§à¦¤à§à¦°à§‡ ইতোমধà§à¦¯à§‡ à¦à¦‡ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ à¦à¦¬à¦‚ সারà§à¦à¦¾à¦°à§‡à¦° নামে à¦à¦•à¦Ÿà¦¿ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ রয়েছে
+ à¦à¦‡ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿà§‡à¦° বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€à¦° সঙà§à¦—ে পà§à¦°à¦¦à¦¤à§à¦¤ বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ মেলেনা
+ অজানা জটিলতা দেখা দিয়েছে
+ হোসà§à¦Ÿà¦•à§‡ খà§à¦à¦œà§‡ পাওয়া যায়নি
+ সারà§à¦à¦¾à¦° ঊদাহরণ পাওয়া যায়নি
+ সারà§à¦à¦¾à¦° সাড়া দিতে অনেক দীরà§à¦˜ সময় নিল
+ à¦à§à¦² গঠনের URL
+ SSL initialization বà§à¦¯à¦¾à¦°à§à¦¥
+ SSL server à¦à¦° পরিচয় সà§à¦¨à¦¿à¦¶à§à¦šà¦¿à¦¤ করা গেলনা
+ অজানা সারà§à¦à¦¾à¦° সংষà§à¦•à¦°à¦£
+ যোগাযোগ সà§à¦¥à¦¾à¦ªà¦¨ করা গেলনা
+ নিরাপদ যোগাযোগ সà§à¦¥à¦¾à¦ªà¦¿à¦¤ হয়েছে
+ à¦à§à¦² বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ বা কà§à¦Ÿà¦¶à¦¬à§à¦¦
+ অনà§à¦®à§‹à¦¦à¦¨ বà§à¦¯à¦¾à¦°à§à¦¥
+ অনূমোদনকরী সারà§à¦à¦¾à¦° পà§à¦°à¦¬à§‡à¦¶à¦¾à¦§à¦¿à¦•à¦¾à¦° অসà§à¦¬à§€à¦•à¦¾à¦° করেছে
+ অনাকাংখিত অবসà§à¦¥à¦¾; পূণরায় সারà§à¦à¦¾à¦° URL ঠপà§à¦°à¦¬à§‡à¦¶ করà§à¦¨
+ আপনার অনà§à¦®à§‹à¦¦à¦¨ বাতিল হয়ে গেছে। আবার অনà§à¦®à§‹à¦¦à¦¨ নিন
+ দয়া করে চলতি কà§à¦Ÿà¦¶à¦¬à§à¦¦ দিন
+ আপনার সেশন বাতিল হয়ে গেছে। আবার সংযà§à¦•à§à¦¤ হোন
+ অনà§à¦®à§‹à¦¦à¦¨ পà§à¦°à¦¦à¦¾à¦¨à¦•à¦¾à¦°à§€ সারà§à¦à¦¾à¦°à§‡ সংযোগের চেষà§à¦Ÿà¦¾ চলছে....
+ à¦à¦‡ অনà§à¦®à§‹à¦¦à¦¨ পà§à¦°à¦•à§à¦°à¦¿à§Ÿà¦¾ সারà§à¦à¦¾à¦°à§‡ সমরà§à¦¥à¦¨ করেনা
+ %1$s à¦à¦•à¦¾à¦§à¦¿à¦• à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ সমরà§à¦¥à¦¨ করেনা
+ আপনার সারà§à¦à¦¾à¦° à¦à¦•à¦Ÿà¦¿ সঠিক বà§à¦¯à¦¬à¦¹à¦¾à¦°à¦•à¦¾à¦°à§€ আইডি দেয়না। দয়া করে পà§à¦°à¦¶à¦¾à¦¸à¦•à§‡à¦° সংগে যোগাযোগ করà§à¦¨
+⇥
+ à¦à¦‡ সারà§à¦à¦¾à¦°à§‡à¦° বিপরীতে অনà§à¦®à§‹à¦¦à¦¨ পà§à¦°à¦¦à¦¾à¦¨ করা গেলনা
+ ফাইল নবায়ন করে রাখà§à¦¨
পূনঃনামকরণ
অপসারণ
+ আপনি কি সতà§à¦¯à¦¿à¦‡ %1$s অপসারণ করতে চান?
+ আপনি কি সতà§à¦¯à¦¿à¦‡ %1$s à¦à¦¬à¦‚ à¦à¦° কনটেনà§à¦Ÿ অপসারণ করতে চান?
+ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° লোকাল
+ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° লোকাল কনটেনà§à¦Ÿ
+ সারà§à¦à¦¸à¦¾à¦° থেকে অপসারণ কর
+ দà§à¦°à¦¬à¦°à§à¦¤à§€ ও সà§à¦¥à¦¾à¦¨à§€à§Ÿ
+ অপসারণ সফল
+ অপসারণ বà§à¦¯à¦¾à¦°à§à¦¥
+ à¦à¦•à¦Ÿà¦¿ নতà§à¦¨ নাম লিখà§à¦¨
+ সà§à¦¥à¦¾à¦¨à§€à§Ÿ কপির পূনঃনামকরণ করা গেলনা; অনà§à¦¯ কোন নাম দিয়ে চেষà§à¦Ÿà¦¾ করà§à¦¨
+ পূনঃনামকরণ সমà§à¦ªà¦¨à§à¦¨ করা গেলনা
+ দà§à¦°à¦¬à¦°à§à¦¤à§€ ফাইল চেক করা গেলনা
+ ফাইল কনটেনà§à¦Ÿà¦¸à¦®à§‚হ ইতোমধà§à¦¯à§‡ সমনà§à¦¬à§Ÿ করা হয়েছে
+ ফোলà§à¦¡à¦¾à¦° তৈরী করা গেলনা
+ à¦à¦¸à¦•à¦² কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° নিষিদà§à¦§: / \\ < > : \" | ? *
+ ফাইলের নাম শà§à¦¨à§à¦¯ রাখা যাবেনা
+ à¦à¦•à¦®à§‚হà§à¦°à§à¦¤ অপেকà§à¦·à¦¾ করà§à¦¨
+ অনাকাঙà§à¦–িত সমসà§à¦¯à¦¾; অনà§à¦¯à¦•à§‹à¦¨ অà§à¦¯à¦¾à¦ª থেকে ফাইলটি নিরà§à¦¬à¦¾à¦šà¦¨ করà§à¦¨
+ কোন ফাইল নিরà§à¦¬à¦¾à¦šà¦¨ করা হয়নি
+ লিঙà§à¦• পাঠান....
+ oAuth2 দিয়ে লগইন কর
+ oAuth2 সারà§à¦à¦¾à¦°à§‡ সংযোগের চেষà§à¦Ÿà¦¾ চলছে....
+ সাইটটির পরিচয় সণাকà§à¦¤ করা গেলনা
+ - সারà§à¦à¦¾à¦° পà§à¦°à¦¤à§à¦¯à§Ÿà¦¨à¦ªà¦¤à§à¦°à¦Ÿà¦¿ বিশà§à¦¬à¦¾à¦¸à¦¯à§‹à¦—à§à¦¯ নয়
+ - সারà§à¦à¦¾à¦° পà§à¦°à¦¤à§à¦¯à§Ÿà¦¨à¦ªà¦¤à§à¦° বাতিল হয়ে গেছে
+ - সারà§à¦à¦¾à¦° পà§à¦°à¦¤à§à¦¯à§Ÿà¦¨à¦ªà¦¤à§à¦°à¦Ÿà¦¿à¦¤à§‡ উলà§à¦²à§‡à¦–িত বৈধতার তারিখ à¦à¦¬à¦¿à¦·à§à¦¯à¦¤ à¦à¦° জনà§à¦¯ পà§à¦°à¦¯à§‹à¦œà§à¦¯
+ - পà§à¦°à¦¤à§à¦¯à§Ÿà¦¨à¦ªà¦¤à§à¦°à¦Ÿà¦¿à¦¤à§‡ উলà§à¦²à§‡à¦–িত হোসà§à¦Ÿà¦¨à§‡à¦®à§‡à¦° সঙà§à¦—ে URL মেলেনা
+ আপনি কি তবà§à¦“ পà§à¦°à¦¤à§à¦¯à§Ÿà¦¨à¦ªà¦¤à§à¦°à¦Ÿà¦¿à¦•à§‡ বিশà§à¦¬à¦¾à¦¸ করতে চান?
+ পà§à¦°à¦¤à§à¦¯à§Ÿà¦¨à¦ªà¦¤à§à¦°à¦Ÿà¦¿ সংরকà§à¦·à¦£ করা গেলনা
+ বিসতারিত
+ লà§à¦•à¦¿à§Ÿà§‡ রাখ
+ পà§à¦°à¦¦à¦¾à¦¨ করা হলো:
+ পà§à¦°à¦¦à¦¾à¦¨ করলেন:
+ সাধারণ নাম:
+ পà§à¦°à¦¤à¦¿à¦·à§à¦ ান:
+ পà§à¦°à¦¤à¦¿à¦·à§à¦ ানের শাখা
+ দেশ:
+ পà§à¦°à¦¦à§‡à¦¶:
+ অবসà§à¦¥à¦¾à¦¨:
+ পà§à¦°à¦¯à§‹à¦œà§à¦¯à¦•à¦¾à¦²:
+ হইতে:
+ পà§à¦°à¦¤à¦¿:
+ সà§à¦¬à¦¾à¦•à§à¦·à¦°:
+ অà§à¦¯à¦¾à¦²à¦—োরিদম:
+ পà§à¦°à¦¤à§à¦¯à§Ÿà¦¨à¦ªà¦¤à§à¦°à¦Ÿà¦¿ পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করা গেলনা।
+ - à¦à§à¦² সমà§à¦ªà¦°à§à¦•à§‡ কোন তথà§à¦¯ নেই
+ à¦à¦Ÿà¦¿ à¦à¦•à¦Ÿà¦¿ পà§à¦²à§‡à¦¸à¦¹à§‹à¦²à§à¦¡à¦¾à¦°
+ placeholder.txt
+ PNG ছবি
+ ৩৮৯ কেবি
+ 2012/05/18 12:23 PM
+ 12:23:45
+ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ওয়াইফাই দিয়ে ছবি আপলোড করà§à¦¨
+ শà§à¦§à§à¦®à¦¾à¦¤à§à¦° ওয়াইফাই দিয়ে à¦à¦¿à¦¡à¦¿à¦“ আপলোড করà§à¦¨
+ /তাৎকà§à¦·à¦£à¦¿à¦• আপলোড
+ নবায়নকরণে দà§à¦¬à¦¨à§à¦¦
+ সà§à¦¥à¦¾à¦¨à§€à§Ÿ ফাইল আর দà§à¦°à¦¬à¦°à§à¦¤à§€ ফাইল %s à¦à¦• নয়। à¦à¦—োতে চাইলে সারà§à¦à¦¾à¦°à§‡à¦° ফাইলের কনটেনà§à¦Ÿ পà§à¦°à¦¦à¦¿à¦¸à§à¦¥à¦¾à¦ªà¦¿à¦¤ হবে।
+ উà¦à§Ÿà¦•à§‡ রাখ
+ উপরে লেখ
+ আপলোড কোরোনা
+ ছবি পà§à¦°à¦¾à¦•à¦¦à¦°à§à¦¶à¦¨
+ ছবিটি পà§à¦°à¦¦à¦°à§à¦¶à¦¨ করা যাবেনা
+ %1$s কে %2$s সà§à¦¥à¦¾à¦¨à§€à§Ÿ ফোলà§à¦¡à¦¾à¦°à§‡ কপি করা গেলনা
+ দà§à¦ƒà¦–িত, আপনার সারà§à¦à¦¾à¦° à¦à¦¾à¦—াà¦à¦¾à¦—ি উপযোগী নয়। দয়া করে আপনার
+⇥⇥পà§à¦°à¦¶à¦¾à¦¸à¦•à§‡à¦° সঙà§à¦—ে যোগাযোগ করà§à¦¨à¥¤
+ à¦à¦‡ ফাইল অথবা ফোলà§à¦¡à¦¾à¦° à¦à¦¾à¦—াà¦à¦¾à¦—ির চেষà§à¦Ÿà¦¾ করতে যেয়ে à¦à¦•à¦Ÿà¦¿ জটিলতা হয়েছে
+ à¦à¦‡ ফাইল অথবা ফোলà§à¦¡à¦¾à¦° à¦à¦¾à¦—াà¦à¦¾à¦—ি রদ করার চেষà§à¦Ÿà¦¾ করতে যেয়ে à¦à¦•à¦Ÿà¦¿ জটিলতা হয়েছে
+ পাঠাও
+ লিঙà§à¦• কপি করো
+ কà§à¦²à¦¿à¦ªà¦¬à§‹à¦°à§à¦¡à§‡ কপি করা হলো
+ জটিল à¦à§à¦°à¦¾à¦¨à§à¦¤à¦¿: কাজটি করা যাবেনা
+ সারà§à¦à¦¾à¦°à§‡ সংযোগ সà§à¦¥à¦¾à¦ªà¦¨à§‡à¦° সময় à¦à¦•à¦Ÿà¦¿ à¦à§à¦°à¦¾à¦¨à§à¦¤à¦¿ ঘটলো।
+ সারà§à¦à¦¾à¦°à§‡à¦° জনà§à¦¯ অপেকà§à¦·à¦¾ করার সময় à¦à¦•à¦Ÿà¦¿ à¦à§à¦°à¦¾à¦¨à§à¦¤à¦¿ ঘটলো, কাজটি করা যেতনা
+ সারà§à¦à¦¾à¦°à§‡à¦° জনà§à¦¯ অপেকà§à¦·à¦¾ করার সময় à¦à¦•à¦Ÿà¦¿ à¦à§à¦°à¦¾à¦¨à§à¦¤à¦¿ ঘটলো, কাজটি করা যেতনা
+ কাজটি সমà§à¦ªà¦¨à§à¦¨ করা গেলনা, সারà§à¦à¦¾à¦° সংযোগ পাওয়া যাচà§à¦›à§‡à¦¨à¦¾
+
+ আপনার %s অনà§à¦®à¦¤à¦¿ নেই
+ ফাইলটি পূনঃনামকরণ করতে
+ ফাইলটি মà§à¦›à§‡ ফেলতে
+ ফাইলটি à¦à¦¾à¦—াà¦à¦¾à¦—ি করতে
+ ফাইলটি à¦à¦¾à¦—াà¦à¦¾à¦—ি রোধ করতে
+ ফাইল সৃষà§à¦Ÿà¦¿ করতে
+ à¦à¦‡ ফোলà§à¦¡à¦¾à¦° আপলোড করতে
+ সারà§à¦à¦¾à¦°à§‡ à¦à¦‡ ফাইলটি আর পà§à¦°à¦¾à¦ªà§à¦¤à¦¬à§à¦¯ নয়
+ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ
+ à¦à¦•à¦¾à¦‰à¦¨à§à¦Ÿ যোগ কর
+ à¦à§à¦² কà§à¦Ÿà¦¶à¦¬à§à¦¦
+ সরাও
+ à¦à¦–ানে কিছৠনেই। à¦à¦•à¦Ÿà¦¿ ফোলà§à¦¡à¦¾à¦° যোগ করতে পারেন!
+ বেছে নিন
+ সরাতে বà§à¦¯à¦¾à¦°à§à¦¥ হলো। ফাইলটি রয়েছে কিনা দেখà§à¦¨à¥¤
+ নিরাপতà§à¦¤à¦¾
diff --git a/res/values-bn-rIN/strings.xml b/res/values-bn-rIN/strings.xml
new file mode 100644
index 0000000000..a49555a8b0
--- /dev/null
+++ b/res/values-bn-rIN/strings.xml
@@ -0,0 +1,19 @@
+
+
+ %1$s অà§à¦¯à¦¾à¦¨à¦¡à§à¦°à§Ÿà§‡à¦¡ অà§à¦¯à¦¾à¦ª
+ সংসà§à¦•à¦°à¦£ %1$s
+ ফাইলস
+ নতà§à¦¨ ফোলà§à¦¡à¦¾à¦°
+ সেটিংস
+ অঙà§à¦•à¦¿à¦¤ করা
+ ইউজারনেম
+ ফাইলস
+ লোড করা হচà§à¦›à§‡...
+ ডাউনলোড করà§à¦¨
+ বাতিল করা
+ à¦à§à¦²
+ ফোলà§à¦¡à¦¾à¦°à§‡à¦° নাম
+ পà§à¦¨à¦ƒà¦¨à¦¾à¦®à¦•à¦°à¦£
+ সরান
+
+
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index c757504ac2..30f5ce2227 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -1,2 +1,5 @@
-
+
+ Nova fascikla
+
+
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index ebfd598774..d0b98a1d33 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -7,17 +7,20 @@
Contingut d\'altres aplicacions
Fitxers
Obre amb
- Crea una carpeta
+ Carpeta nova
Configuració
Detalls
+ Envia
General
Més
Comptes
Gestió de comptes
PIN de l\'aplicació
Protegiu el client
- Activa la pujada instantà nia
+ Pujada instantà nies de fotografies
Puja instantà niament les fotografies preses amb la cà mera
+ Pujades de vÃdeos instantanies
+ Pujar instantà niament vÃdeos gravats per la cà mera
Habilita el registre
Això s\'usa per registrar problemes
Història del registre
@@ -28,9 +31,8 @@
Comentaris
Imprint
Proveu %1$s a un telèfon avançat!
- Vull convidar-te a usar l\'aplicació %1$s al teu telèfon avançat!\nBaixa\'l aquÃ: %2$s
Comprova el servidor
- Adreça del servidor
+ Adreça del servidor https://…
Nom d\'usuari
Contrasenya
Nou a %1$s?
@@ -46,7 +48,9 @@
No s\'ha rebut cap contingut. Res per pujar
%1$s no pot accedir al contingut compartit
S\'està pujant
- No hi ha fitxers en aquesta carpeta.\nPodeu afegir fitxers a través de l\'opció \"Puja\" del menú.
+ Res per aquÃ. Pugeu alguna cosa!
+ Carregant...
+ No hi ha arxius a aquesta carpeta
Feu clic en un fitxer per mostrar informació addicional.
Mida:
Tipus:
@@ -55,6 +59,8 @@
Baixa
Actualitza el fitxer
L\'arxiu s\'ha canviat de nom a %1$s durant la cà rrega
+ Enllaç de compartició
+ Deixa de compartir l\'enllaç
SÃ
No
D\'acord
@@ -77,6 +83,7 @@
%1$s s\'ha pujat correctament
La pujada ha fallat
La pujada de %1$s no s\'ha pogut acabar
+ La pujada ha fallat, t\'has de tornar a acreditar
S\'està baixant ...
%1$d%% pujant %2$s
La baixada ha estat correcte
@@ -84,8 +91,10 @@
La baixada ha fallat
La baixada de %1$s no s\'ha pogut acabar
No baixat encara
+ La descà rrega ha fallat, t\'has de tornar a acreditar
Escolliu el compte
La sincronització ha fallat
+ La sincronització ha fallat, us heu d\'acreditar de nou
La sincronització de %1$s no s\'ha pogut acabar
Contrasenya no và lida per %1$s
S\'han trobat conflictes
@@ -94,7 +103,6 @@
El contingut de %1$d arxius no es va poder sincronitzar (%2$d conflictes)
S\'han oblidat alguns fitxers locals
%1$d fitxers no s\'han pogut copiar dins de %2$s carpetes
- Des de la versió 1.3.16, els fitxers pujats des d\'aquest dispositiu es copien a la carpeta local %1$s per prevenir pèrdues de dades quan es sincronitza un únic fitxer amb diversos comptes.\n\nDegut a aquest canvi, tots els fitxers pujats en versions anteriors d\'aquesta aplicació es copiaven a la carpeta %2$s. Malgrat tot, un error impedia aquesta operació durant la sinconització del compte. Podeu deixar els fitxer(s) tal i com estan i eliminar l\'enllaç a %3$2, o moure els fitxer(s) a la carpeta %1$s i retenir l\'enllaç a %4$s.\n\nA baix hi ha els fitxers local(s) i els fitxer(s) remots a %5$s als que estaven enllaçats.
La carpeta %1$s ja no existeix
Mou-los tots
S\'han mogut tots els fitxers
@@ -130,6 +138,7 @@
Botó de rebobinat
Botó de reproducció o pausa
Botó de reproducció rà pida
+ S\'està autenticant...
S\'està intentant acreditar-vos...
Sense connexió de xarxa
La connexió segura no està disponible.
@@ -158,6 +167,8 @@
S\'està connectant a un servidor d\'autenticació...
El serivdor no permet aquest mètode d\'autenticació
%1$s no permet comptes múltiples
+ El servidor no retorna una id d\'usuari correcta, contacteu amb l\'administrador.
+ No es pot autenticar en aquest servidor
Mantén el fitxer actualitzat
Reanomena
Elimina
@@ -175,9 +186,12 @@
L\'arxiu remot no ha pogut ser comprovat
Contingut de l\'arxiu ja sincronitzat
La carpeta no s\'ha pogut crear
+ Carà cters no permesos: / \\ < > : \" | ? *
+ El Nom de l\'arxiu no pot estar buit
Espereu
S\'ha produït un problema inesperat; proveu una altra aplicació per seleccionar el fitxer
No heu seleccionat cap fitxer
+ Envia l\'enllaç a...
Accés amb oAuth2
Connectant amb el servidor oAuth2...
No s\'ha pogut verificar la identitat del lloc web
@@ -202,6 +216,8 @@
A:
Signatura:
Algoritme:
+ No s\'ha pogut mostrar el certificat.
+ - No hi ha informació de l\'error
Això és un text variable
placeholder.txt
Imatge PNG
@@ -209,6 +225,7 @@
2012/05/18 12:23 PM
12:23:45
Puja les fotos només via WiFi
+ Puja les fotos només via WiFi
/CarregaInstantà nia
Conflicte d\'actualització
El fitxer remot %s no està sincronitzat amb el fitxer local. Si continueu es substituirà el contingut del fitxer en el servidor.
@@ -216,17 +233,32 @@
Sobrescriu
No el pugis
Visualització prèvia d\'imatge
- Auquesta imatge no es pot mostrar
+ Aquesta imatge no es pot mostrar
%1$s no s\'ha pogut copiar a la carpeta local %2$s
- ha fallat la pujada instantà nia\"
- Fallada de pujades instantà nies
- Resum de totes les pujades instantà nies que han fallat
- selecciona-ho tot
- reintenta els seleccionats
- elimina tots els seleccionats de la cua de pujada
- intenta pujar de nou la imatge:
- Carrega més imatges
- no facis res, no està s en lÃna per la pujada instantà nia
- Missatge d\'Error:
- Comproveu la configuració del servidor, potser heu excedit la quota.
+ La compartició no es troba disponible al vostre servidor. Contacteu amb l\'administrador.
+ S\'ha produït un error en intentar compartir aquest fitxer o carpeta
+ S\'ha produït un error en intentar deixar de compartir aquest fitxer o carpeta
+ Envia
+ Copia l\'enllaç
+ S\'ha copiat al porta-retalls
+ Error crÃtic: no es poden realitzar operacions
+ Hi ha hagut un error mentre es connectava al servidor.
+ Hi ha hagut un error esperant al servidor, l\'operació no s\'ha pogut realitzar
+ Hi ha hagut un error esperant el servidor, l\'operació no s\'ha pogut realitzar
+ La operació no s\'ha pogut completar, no es pot accedir al servidor
+
+ No teniu permisos %s
+ per canviar el nom d\'aquest fitxer
+ per eliminar aquest fitxer
+ per compartir aquest fitxer
+ per deixar de compartir aquest fitxer
+ per crear el fitxer
+ per pujar fitxers en aquesta carpeta
+ El fitxer ja no està disponible en el servidor
+ Comptes
+ Afegeix compte
+ Es requereix autenticació
+ Contrasenya incorrecta
+ Escull
+ Seguretat
diff --git a/res/values-cs-rCZ/strings.xml b/res/values-cs-rCZ/strings.xml
index c77a1ad847..6b8b96c6f1 100644
--- a/res/values-cs-rCZ/strings.xml
+++ b/res/values-cs-rCZ/strings.xml
@@ -7,34 +7,40 @@
Obsah z ostatnÃch aplikacÃ
Soubory
OtevÅ™Ãt pomocÃ
- Vytvořit adresář
+ Nová složka
NastavenÃ
Podrobnosti
+ Odeslat
Obecné
VÃce
ÚÄty
Spravovat úÄty
- PIN aplikace
+ PIN do aplikace
Chraňte svého klienta
- Povolit okamžité odeslánÃ
- OkamžitÄ› odesÃlat vytvoÅ™ené fotografie
+ Okamžité nahrávánà obrázků
+ Okamžitě nahrávat vytvořené fotografie
+ Okamžité nahrávánà videa
+ OkamžitÄ› odesÃlat nahrané video
Povolit logovánÃ
Použito k zaznamenávánà problémů
Historie logovánÃ
Zobrazuje zaznamenané logy
Smazat historii
Nápověda
+ DoporuÄit přátelům
Odezva
Imprint
+ Zkuste %1$s na vašem smartphonu!
+ ChtÄ›l bych vás pozvat k použÃvánà %1$s na vaÅ¡em chytrém telefonu!\nKe staženà zde: %2$s
Zkontrolovat server
- Adresa serveru
+ Adresa serveru https://...
Uživatelské jméno
Heslo
NováÄek s %1$s?
Soubory
Připojit
Odeslat
- Vyberte adresář pro nahrané soubory:
+ Vyberte adresář pro nahránÃ:
Nenalezen žádný úÄet
Nemáte žádné %1$s úÄty. VytvoÅ™te si, prosÃm, nejdÅ™Ãve úÄet.
NastavenÃ
@@ -43,7 +49,9 @@
Neobdržen žádný obsah. Nic k odeslánÃ.
%1$s nemá právo pÅ™istupovat ke sdÃlenému obsahu
OdesÃlánÃ
- Ve složce nejsou žádné soubory.\nNové soubory mohou být přidány pomocà volby \"Odeslat\".
+ Žádný obsah. Nahrajte něco!
+ NaÄÃtám...
+ V tomto adresáři nejsou žádné soubory.
VÃce informacà zÃskáte klepnutÃm na soubor.
Velikost:
Typ:
@@ -52,6 +60,8 @@
Stáhnout
Obnovit soubor
Soubor byl v průbÄ›hu odesÃlánà pÅ™ejmenován na %1$s
+ SdÃlet odkaz
+ ZruÅ¡it sdÃlenà odkazu
Ano
Ne
OK
@@ -67,13 +77,14 @@
Smazat úÄet
VytvoÅ™it úÄet
Odeslat z ...
- Název adresáře
+ Název složky
OdesÃlám...
%1$d%% OdesÃlám %2$s
OdesÃlánà úspěšné
%1$s byl úspěšně odeslán
OdesÃlánà selhalo
OdesÃlánà %1$s nemohlo být dokonÄeno
+ Nahrávánà selhalo. Je třeba se znovu přihlásit.
Stahuji ...
%1$d%% Stahuji %2$s
Staženà úspěšné
@@ -81,8 +92,10 @@
Staženà selhalo
Staženà %1$s nemohlo být dokonÄeno
Ještě nestaženo
+ Stahovánà selhalo. Je třeba se znovu přihlásit.
Vybrat úÄet
Synchronizace selhala
+ Synchronizace selhala. Je třeba se znovu přihlásit.
Synchronizaci %1$s nelze dokonÄit
Chybné heslo pro %1$s
Nalezeny konflikty
@@ -90,14 +103,15 @@
Automatická synchronizace souborů selhala
Obsah %1$d souborů nemohl být synchronizován (poÄet konfliktů: %2$d)
NÄ›které mÃstnà soubory byly zapomenuty
- %1$d souborů z adresáře %2$s nelze zkopÃrovat do
- Od verze 1.3.16 jsou soubory odeslané z tohoto zaÅ™ÃzenÃ, pro ochranu proti ztrátÄ› dat pÅ™i synchronizaci z vÃce úÄtů, nahrány do mÃstnà složky %1$s.\n\nVÅ¡echny soubory odeslané pÅ™edchozÃmi verzemi byly kvůli této zmÄ›nÄ› pÅ™esunuty do složky %2$s. Bohužel chyba zabránila dokonÄenà této operace pÅ™i synchronizaci úÄtu. Můžete nynà ponechat soubory ve stávajÃcÃm stavu a smazat odkaz na %3$s nebo pÅ™esunout soubory do adresáře %1$s a zachovat odkazy na %4$s.\n\nNásleduje seznam mÃstnÃch souborů a jejich odkazů na vzdálené soubory v %5$s.
+ %1$d souborů z %2$s složek se nepodaÅ™ilo zkopÃrovat do
+ Od verze 1.3.16 jsou soubory nahrané z tohoto zaÅ™Ãzenà kopÃrovány do mÃstnà složky %1$s, aby se zabránilo ztrátÄ› dat pÅ™i synchronizaci jednoho souboru s vÃce úÄty.\n\nVÅ¡echny soubory nahrané pÅ™edchozÃmi verzemi aplikace byly z tohoto důvodu pÅ™ekopÃrovány do složky %2$s. Bohužel se objevila chyba zabraňujÃcà dokonÄenà této operace v průbÄ›hu synchronizace úÄtu. BuÄ můžete soubor(y) ponechat jak jsou a odebrat odkaz do složky %3$s, nebo pÅ™esunout soubor(y) do složky %1$s a zachovat odkaz na %4$s.\n\nNÞe je seznam mÃstnÃch i vzdálených souborů ve složce %5$s, do které byly odkázány.
+ Složka %1$s již neexistuje
Přesunout vše
Všechny soubory byly přesunuty
Některé soubory nebylo možno přesunout
MÃstnÃ: %1$s
Vzdálené: %1$s
- Nedostatek mÃsta pro zkopÃrovánà vybraných souborů do složky %1$s. PÅ™ejete si je mÃsto kopÃrovánà pÅ™esunout?
+ Nenà dostatek mÃsta pro zkopÃrovánà vybraných souborů do adresáře %1$s. PÅ™ejete si je mÃsto kopÃrovánà pÅ™esunout?
Zadejte PIN aplikace
Zadat PIN aplikace
Při každém spuštěnà aplikace bude vyžadováno zadánà PIN
@@ -117,6 +131,7 @@
Nepodporovaný kodek
Multimediálnà soubor nelze pÅ™eÄÃst
Multimediálnà soubor nenà správně kódován
+ VyprÅ¡el Äas pÅ™i pokusu o pÅ™ehránÃ
Multimediálnà soubor nelze proudovÄ› odesÃlat
Multimediálnà soubor nemůže být pÅ™ehrán s výchozÃm pÅ™ehrávaÄem
Chyba zabezpeÄenà pÅ™i pokusu o pÅ™ehránà %1$s
@@ -125,18 +140,22 @@
TlaÄÃtko PÅ™etoÄit
TlaÄÃtko PÅ™ehrát/Pozastavit
TlaÄÃtko Rychle vpÅ™ed
+ Kontroluji pověřenÃ...
ZkouÅ¡Ãm se pÅ™ihlásit...
Žádné sÃÅ¥ové spojenÃ
ZabezpeÄené spojenà nenà k dispozici
Spojenà navázáno
ZkouÅ¡Ãm spojenÃ...
Neplatné nastavenà serveru
+ ÚÄet pro stejného uživatele a server již v zaÅ™Ãzenà existuje
+ Zadaný uživatel neodpovÃdá uživateli tohoto úÄtu
Nastala neznámá chyba
Nelze najÃt hostitele
Instance serveru nenalezena
Serveru trvalo pÅ™ÃliÅ¡ dlouho odpovÄ›dÄ›t
Neplatné URL
Inicializace SSL selhala
+ Nemohu ověřit SSL identitu serveru
Nerozpoznaná verze serveru
Nemohu navázat spojenÃ
ZabezpeÄené spojenà navázáno
@@ -144,12 +163,19 @@
Neúspěšné pÅ™ihlášenÃ
PÅ™Ãstup zamÃtnut autorizaÄnÃm serverem
NeoÄekávaný stav; prosÃm vložte znovu URL adresu serveru
+ VaÅ¡e pÅ™ihlášenà vyprÅ¡elo. PÅ™ihlaÅ¡te se, prosÃm, znovu
Zadejte prosÃm aktuálnà heslo
+ VaÅ¡e pÅ™ihlášenà vyprÅ¡elo. PÅ™ihlaÅ¡te se, prosÃm, znovu
+ PÅ™ipojuji se k pÅ™ihlaÅ¡ovacÃmu serveru...
+ Server nepodporuje tuto přihlašovacà metodu
+ %1$s nepodporuje vÃce úÄtů
+ Váš server nevracà správné přihlašovacà ID, kontaktujte vašeho administrátora
+ Nenà možné provést ověřenÃ
Udržovat soubor aktuálnÃ
Přejmenovat
Odstranit
- Opravdu si přejete odstranit %1$s ?
- Opravdu si přejete odstranit %1$s a jeho obsah?
+ Opravdu chcete odstranit %1$s ?
+ Opravdu chcete odstranit %1$s a jeho obsah?
Pouze mÃstnÃ
Pouze mÃstnà obsah
Odstranit ze serveru
@@ -161,10 +187,14 @@
PÅ™ejmenovánà nelze dokonÄit
Vzdálený soubor nemohl být zkontrolován
Obsah souboru je již synchronizován
- Adresář nelze vytvořit
+ Adresář nemohl být vytvořen
+ Zakázané znaky: / \\ < > : \" | ? *
+ Název nemůže být prázdný
PoÄkejte chvÃli
NeoÄekávaný problém - zkuste zvolit soubor jinou aplikacÃ
Žádný soubor nebyl vybrán
+ Odeslat odkaz ...
+ Přihlásit se s oAuth2
Připojuji se k oAuth2 serveru...
Identitu stránky nelze ověřit
- Certifikát serveru je nedůvěryhodný
@@ -188,13 +218,16 @@
Pro:
Podpis:
Alogritmus:
+ Certifikát nemohl být zobrazen.
+ - Žádné informace o této chybě
Zástupný text
placeholder.txt
Obrázek PNG
389 KB
2012/05/18 12:23 PM
12:23:45
- OdesÃlat obrázky pouze skrze WiFi
+ OdesÃlat obrázky pouze pÅ™es WiFi
+ Nahrávat videa pouze přes WiFi
/InstantUpload
Konflikt při aktualizaci
Vzdálený soubor %s nenà synchronizován s mÃstnÃm souborem. PokraÄovánà pÅ™epÃÅ¡e obsah souboru na serveru.
@@ -202,17 +235,49 @@
Přepsat
Nenahrávat
Náhled obrázku
- Obrázek nemůže být zobrazen
+ Obrázek nelze zobrazit
%1$s nelze zkopÃrovat do mÃstnÃho adresáře %2$s
- Selhalo Okamžité odeslánÃ\"
- Selhaná okamžitá odeslánÃ
- Souhrn vÅ¡ech selhaných okamžitých odeslánÃ
- vybrat vše
- zkusit znovu vybrané
- smazat vybrané z fronty k nahránÃ
- zkusit znovu odeslat obrázek:
- NaÄÃst vÃce obrázků
- nic nedÄ›lat nejste pÅ™ipojeni pro okamžité odeslánÃ
- Chybová zpráva:
- Zkontrolujte prosÃm nastavenà vaÅ¡eho serveru, možná jste pÅ™ekroÄili kvótu.
+ Cesta pro nahránÃ
+ Je nám lÃto, ale sdÃlenà nenà na vaÅ¡em serveru povoleno. Kontaktujte svého
+administrátora.
+ Nelze sdÃlet. Zkontrolujte prosÃm že soubor existuje
+ PÅ™i pokusu o sdÃlenà tohoto souboru Äi složky nastala chyba
+ Nelze ukonÄit sdÃlenÃ. Zkontrolujte prosÃm že soubor existuje
+ PÅ™i pokusu o zruÅ¡enà sdÃlenà tohoto souboru Äi složky nastala chyba
+ Odeslat
+ ZkopÃrovat odkaz
+ ZkopÃrováno do schránky
+ Kritická chyba: operace nelze provést
+ Při pokusu o připojenà k serveru došlo k chybě.
+ PÅ™i Äekánà na odpovÄ›Ä serveru se vyskytla chyba, operace nemohla být dokonÄena
+ PÅ™i Äekánà na odpovÄ›Ä serveru se vyskytla chyba, operace nemohla být dokonÄena
+ Operace nemohla být dokonÄena, server je nedostupný
+
+ Nemáte oprávněnà %s
+ přejmenovat tento soubor
+ smazat tento soubor
+ sdÃlet tento soubor
+ zruÅ¡it sdÃlenà tohoto souboru
+ vytvořit tento soubor
+ nahrávat do tohoto adresáře
+ Tento soubor již nenà dostupný na serveru
+ ÚÄty
+ PÅ™idat úÄet
+ BezpeÄné spojenà je pÅ™esmÄ›rováno na nezabezpeÄenou trasu.
+ Logy
+ Odeslat historii
+ Logy aplikace ownCloud pro Android
+ NaÄÃtám data...
+ Vyžadováno pÅ™ihlášenÃ
+ Nesprávné heslo
+ Přesunout
+ Zde nic nenÃ. Můžete pÅ™idat adresář!
+ Vybrat
+ Nelze pÅ™esunout. Zkontrolujte prosÃm že soubor existuje
+ Nenà možné adresář pÅ™esunout do vlastnÃho podadresáře
+ Soubor již v cÃlovém adresáři existuje
+ PÅ™i pokusu o pÅ™esun tohoto souboru Äi složky nastala chyba
+ pro přesun tohoto souboru
+ Okamžitá odesÃlánÃ
+ ZabezpeÄenÃ
diff --git a/res/values-cy-rGB/strings.xml b/res/values-cy-rGB/strings.xml
index de4ffef939..daace9cd1b 100644
--- a/res/values-cy-rGB/strings.xml
+++ b/res/values-cy-rGB/strings.xml
@@ -3,15 +3,13 @@
Llwytho i fyny
Cynnwys o becynnau eraill
Ffeiliau
- Creu cyfeiriadur
Gosodiadau
+ Anfon
Cyffredinol
Cyfrifon
Rheoli Cyfrifon
PIN Ap
Amddiffyn eich cleient
- Galluogi llwytho i fyny\'n syth
- Llwytho lluniau dynnwyd â chamera i fyny\'n syth
Cymorth
Imprint
Enw defnyddiwr
@@ -27,7 +25,7 @@
Heb dderbyn cynnwys. Dim cynnwys i lwytho i fyny
Does dim mynediad gan %1$s i gynnwys a rennir
Yn llwytho i fyny
- Does dim ffeilau yn y blygell hon.\nGellir ychwanegu rhai newydd drwy ddewis \"Llwytho i fyny\" yn y ddewislen.
+ Does dim byd fan hyn. Llwythwch rhywbeth i fyny!
Tapiwch ffeil i ddangos gwybodaeth ychwanegol
Maint:
Math:
@@ -47,7 +45,6 @@
Dileu cyfrif
Creu cyfrif
Llwytho i fyny o ...
- Enw cyfeiriadur
Yn llwytho i fyny ...
%1$d%% Llwytho i fyny %2$s
Llwytho i fyny\'n llwyddiannus
@@ -68,13 +65,11 @@
Methodd ffeiliau cadw-yn-gydamserol
Methwyd cydamseru cynnwys ffeiliau %1$d (gwrthdaro %2$d )
Anghofiwyd am rai ffeiliau lleol
- Methwyd copio %1$d ffeil o gyfeiriadur %2$s i mewn i
Symud y cyfan
Symudwyd pob ffeil
Methwyd symud rhai ffeiliau
Lleol: %1$s
Pell: %1$s
- Does dim digon o le i gopïo\'r ffeiliau ddewiswyd i blygell %1$s . Would like to move them into instead?
Cyflwynwch PIN eich Ap
Cyflwynwch PIN eich Ap
Bydd cais am y PIN bob tro mae\'r ap yn cychwyn
@@ -100,8 +95,6 @@
Cadw\'r ffeil yn gyfredol
Ailenwi
Gwaredu
- Ydych chi wir am gael gwared ar %1$s ?
- Ydych chi wir am waredu %1$s a\'i gynnwys?
Lleol yn unig
Cynnwys lleol yn unig
Gwaredu o\'r gweinydd
@@ -113,7 +106,6 @@
Methwyd cwblhau\'r ailenwi
Methwyd gwirio\'r ffeil bell
Cynnwys y ffeil eisoes wedi cydamseru
- Methwyd creu cyfeiriadur
Arhoswch eiliad
Gwall annisgwyl ; dewiswch y ffeil o ap gwahanol
Ni ddewiswyd ffeil
@@ -146,5 +138,8 @@
Cadw\'r ddau
Trosysgrifio
Peidio llwytho i fyny
- Methwyd copïo %1$s i blygell lleol %2$s
+ Anfon
+
+ Cyfrifon
+ Dewisiwch
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 13c0c79d54..544490096d 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -7,33 +7,40 @@
Indhold fra andre apps
Filer
Ã…ben med
- Opret mappe
+ Ny mappe
Indstillinger
Detaljer
+ Send
Generel
Mere
Konti
- Administrer konti
+ Administrér konti
App PIN
Beskyt din klient
- Slå øjeblikkelig upload til
- Upload billeder taget med kamera med det samme
- Aktiver Logning
- Dette bruges til at logge problemer
+ Upload billeder straks
+ Upload straks billeder taget med kameraet
+ Upload videoer straks
+ Upload straks videor optaget med kameraet
+ Aktivér logregistrering
+ Dette bruges til at logregistrere problemer
Logger Historik
Dette viser de optagne logger
- Slet Historik
+ Slet historik
Hjælp
+ Anbefal til en ven
+ Feedback
Imprint
- Check Server
- Serveradresse
+ Prøv %1$s på din smartphone!
+ Jeg ønsker at invitere dig til at bruge %1$s på din smartphone!\nHent den her: %2$s
+ Tjek server
+ Serveradresse https://…
Brugernavn
Kodeord
Uvant med %1$s
Filer
Tilslut
Upload
- Vælg upload mappe:
+ Vælg upload-mappe:
Ingen konto fundet
Der er ingen %1$s brugere på din enhed. Sæt venligst en bruger op først.
Opsætning
@@ -42,15 +49,19 @@
Intet indhold blev modtaget. Intet at uploade.
%1$s er ikke tilladt adgang til delt indhold
Uploader
- Der er ingen filer i denne mappe.\nNye filer kan tilføjes med menu valgmuligheden \"Upload\".
+ Her er tomt. Upload noget!
+ Indlæser...
+ Der er ingen filer i denne mappe.
Tryk på en fil for at vise yderligere information.
Størelse:
Type:
Oprettet:
Ændret:
Hent
- Opdater fil
+ Genopfrisk fil
Filen blev omdøbt til %1$s under upload
+ Del link
+ Ophæv deling
Ja
Nej
OK
@@ -66,13 +77,14 @@
Slet konto
Opret konto
Upload fra ...
- mappenavn
+ Mappenavn
Uploader ...
%1$d%% Uploader %2$s
Upload færdig
%1$s blev uploadet med success
Upload fejlede
Upload af %1$s kunne ikke gennemføres
+ Upload mislykkedes, du kan logge ind på ny
Downloader ...
%1$d%% Downloader %2$s
Download fuldført
@@ -80,8 +92,10 @@
Download fejlede
Download af %1$s kunne ikke fuldføres
Endnu ikke downloadet
+ Download mislykkedes, du skal logge ind på ny
Vælg konto
Synkronisering fejlede
+ Synkroniseringen mislykkedes, du er nødt til at logge ind påny
Synkronisering af %1$s kunne ikke gennemføres
Ugyldig adgangskode for %1$s
Konflikter fundet
@@ -90,13 +104,14 @@
Indholdet af %1$d filer ikke kunne synkroniseres (%2$d konflikter)
Visse lokale filer blev glemt
%1$d filer ud af %2$s mappe kunne ikke kopieres ind i
- Fra version 1.3.16 bliver filer uploadet fra denne enhed kopieret til mappen %1$s for at forhindre datatab når en enkelt fil synkroniseres med flere konti.\n\nPå grund af denne ændring blev alle filer uploadet i tidligere versioner af denne app kopieret til mappen %2$s. Imidlertid forhindrede en fejl færdiggørelsen af denne operation under konto-synkronisering. Du kan enten lade filerne være som de er og fjerne linket til %3$s eller flytte filerne til mappen %1$s og beholde linket til %4$s.\n\nHerunder er en liste med de lokale filer og de eksterne filer i %5$s, som de var knyttet til.
+ Fra version 1.3.16 bliver filer uploadet fra denne enhed kopieret til mappen %1$s for at forhindre datatab når en enkelt fil synkroniseres med flere konti.\n\nPå grund af denne ændring er alle filer som var uploadet i tidligere versioner af denne app kopieret til mappen %2$s. Imidlertid forhindrede en fejl færdiggørelsen af denne operation under konto-synkronisering. Du kan enten lade filen (el. filerne) være som de er og fjerne linket til %3$s eller flytte filen (el. filerne) til mappen %1$s og beholde linket til %4$s.\n\nHerunder er en liste med den lokale fil(er), og den fjerne mappe(r) i %5$s, som de var knyttet til.
+ Mappen %1$s eksistere ikke længere
Flyt alle
Alle filer blev flyttet
Visse filer kunne ikke flyttes
Lokal: %1$s
Fjernplacering: %1$s
- Der er ikke tilstrækkelig plads til at kopiere de valgte filer ind i %1$s mappen. Vil du flytte dem i stedet?
+ Der er ikke plads nok til at kopiere de valgte filer ind i mappen %1$s. Vil du flytte dem i stedet?
Indsæt venligst din App PIN
Indtast App PIN
PIN koden vil blive anmodet om hver gang applikationen bliver startet
@@ -116,39 +131,51 @@
Ikke-understøttet medie codec
Mediefilen kunne ikke læses
Mediefilen er ikke korrekt kodet
+ Tiden udløb under forsøg på at afspille
Mediefilen kan ikke streames
Mediefil kan ikke afspilles med tilgængelige medieafspiller
Sikkerhedsfejl ved forsøg på afspilning af
Inputfejl ved forsøg på afspilning af %1$s
Uventet fejl ved forsøg på afspilning af %1$s
- Tilbagespolings knap
+ Tilbagespolingsknap
Afspil eller pause knap
- Hurtigt fremad kanp
+ Hurtigt fremad-knap
+ Forsøger godkendelse...
Forsøger at logge ind...
Ingen netværksforbindelse
Sikker forbindelse ikke tilgængelig.
Forbindelse oprettet
Afprøver forbindelse ...
Misdannet server konfiguration
+ En konto for den samme bruger og server eksisterer allerede på enheden
+ Den indtastede bruger passer ikke til brugeren for denne konto
Ukendt fejl opstod!
- Kunne ikke finde host
+ Kunne ikke finde værten
Server instans blev ikke fundet
Serveren var for længe om at svare
Deform URL
- SSL initialisering fejlede
- Ikke genkendt server version
+ SSL-initialiseringen fejlede
+ Kunne ikke bekræfte SSl-serverens identitet
+ Ikke genkendt serverversion
Ikke ikke oprette forbindelse
Sikker forbindelse oprettet
Forkert brugernavn eller kodeord
Mislykket godkendelse
Adgang afvist af autorisationsserver
Uventet tilstand; angiv server-URL\'en igen
+ Din godkendelse udløb. Gentag godkendelse
Indtast venligst dit nuværende kodeord
- Hold fil opdateret
+ Din session udløb. Forbind venligst igen
+ Forbinder til godkendelsesserver ...
+ Serveren understøtter ikke denne godkendelsesmetode
+ %1$s understøtter ikke multiple konti
+ Din server retunere ikke et korrekt bruger-id. Kontakt venligst din administrator
+ Kan ikke autentificere mod denne server
+ Hold filen opdateret
Omdøb
Fjern
Er du sikker på at du vil fjerne %1$s ?
- Ønsker du virkelig at %1$s og dets indhold skal fjernes
+ Ønsker du virkelig at slette %1$s og dets indhold?
Kun lokal
Lokalt indhold kun
Fjern fra server
@@ -160,11 +187,15 @@
Omdøbning kunne ikke gennemføres
Ekstern fil kunne ikke kontrolleres
Filindholdet allerede synkroniseret
- Mappe kunne ikke oprettes
+ Kunne ikke oprette mappe
+ Ugyldige tegn: / \\ < > : \" | ? *
+ Filnavnet kan ikke stå tomt.
Vent et øjeblik
Uforventet problem; prøv venligst anden applikation til at vælge filen
Ingen fil blev valgt
- Forbinder til oAuth2 server...
+ Send link til ...
+ Log på med oAuth2
+ Forbinder til oAuth2-server...
Sidens identitet kunne ikke verificeres
- Serverens certifikat er ikke troværdigt
- Serverens certifikat er udløbet
@@ -187,31 +218,65 @@
Til:
Signatur:
Algoritme:
+ Certifikatet kunne ikke vises.
+ - Ingen information om fejlen
Dette er en pladsholder
- stedfortræder.txt
+ pladsholder.txt
PNG Billede
389 KB
2012/05/18 12:23 PM
12:23:45
- Upload billeder kun via WiFi
+ Upload kun billeder via WiFi
+ Upload kun videoer via WiFi
/Øjeblikkelig upload
Opdaterings konflikt
Ekstern fil %s er ikke synkroniseret med lokal fil. At fortsætte vil erstatte indholdet af filen på serveren.
Behold begge
Overskriv
Upload ikke
- Billede preview
+ Forhåndsvisning af billede
Dette billede kan ikke vises
%1$s kunne ikke kopieres til %2$s lokale mappe
- InstantUpload mislykkedes\"
- Øjeblikkelige uploads mislykkedes
- Sammenfatning af alle mislykkede øjeblikkelige uploads
- Vælg alle
- prøv alle markerede igen
- slet alle markerede fra uploadkøen
- prøv at uploade billedet igen:
- Indlæs flere billeder
- gør intet, du er ikke online til øjeblikkelig upload
- Fejlmeddelelse
- Tjek din serverkonfiguration, måske er din kvota overskredet.
+ Sti til upload
+ Beklager, deling er ikke slået til på din server. Kontakt venligst din administrator.
+ Kan ikke dele. Tjek venligst om filen findes.
+ Der opstod en fejl ved deling af denne fil eller mappe
+ Kan ikke fjerne deling. Tjek venligst om filen findes.
+ Der opstod en fejl ved stopning af deling af denne mappe.
+ Send
+ Kopiér link
+ Kopieret til udklipsholder
+ Kritisk fejl: kan ikke udføre handlingerne
+ Der opstod en fejl under tilslutningen til serveren.
+ Der opstod en fejl mens vi ventede på serveren, handlingen kunne ikke gennemføres
+ Der opstod en fejl mens vi ventede på serveren, handlingen kunne ikke gennemføres
+ Handlingen kunne ikke gennemføres, serveren er utilgængelig
+
+ Du har ikke rettigheden %s
+ til at omdøbe denne fil
+ til at slette denne fil
+ til at dele denne fil
+ til at stoppe deling af denne fil
+ til at oprette filen
+ til at overføre til denne mappe
+ Filen er ikke længere tilgængelig på serveren
+ Konti
+ Tilføj konto
+ Sikker forbindelse videredirigeres til en usikker rute.
+ Logge
+ Send historik
+ App-logregistreringer for ownCloud Android
+ Indlæser data...
+ Godkendelse påkrævet
+ Forkert kodeord
+ Flyt
+ Der er intet her. Du kan tilføje en mappe!
+ Vælg
+ Kan ikke flytte. Tjek venligst om filen findes
+ Det er ikke muligt at flytte en mappe til en undermappe
+ Filen findes allerede i destinationsmappen
+ Der opstod en fejl under forsøg på at flytte denne mappe eller fil
+ til at flytte denne fil
+ Øjeblikkelige uploads
+ Sikkerhed
diff --git a/res/values-de-rAT/strings.xml b/res/values-de-rAT/strings.xml
index c757504ac2..f2c13bf6a4 100644
--- a/res/values-de-rAT/strings.xml
+++ b/res/values-de-rAT/strings.xml
@@ -1,2 +1,13 @@
-
+
+ Dateien
+ Einstellungen
+ Allgemein
+ Hilfe
+ Passwort
+ Dateien
+ Herunterladen
+ Abbrechen
+ Fehler
+
+
diff --git a/res/values-de-rCH/strings.xml b/res/values-de-rCH/strings.xml
index d5a2b7ffa8..7a5b9e9148 100644
--- a/res/values-de-rCH/strings.xml
+++ b/res/values-de-rCH/strings.xml
@@ -7,17 +7,16 @@
Inhalt von anderen Apps
Dateien
Öffnen mit
- Ordner anlegen
+ Neues Verzeichnis
Einstellungen
Details
+ Senden
Allgemein
Mehr
Konten
Konten verwalten
App-PIN
Schützen Sie Ihren Client
- Aktiviert den sofortigen Upload
- Laden Sie Ihre Fotos von der Kamera sofort hoch
Protokollierung aktivieren
Dies wird zur Protokollierung von Problemen genutzt
Protokollierungsverlauf
@@ -27,14 +26,12 @@
Rückmeldungen
Impressum
Server überprüfen
- Adresse des Servers
Benutzername
Passwort
Ist %1$s neu für Sie?
Dateien
Verbinden
Hochladen
- Wähle Zielordner:
Kein Konto gefunden
Es sind keine %1$s-Konten auf Ihrem Gerät eingerichtet. Bitte richten Sie zuerst ein Konto ein.
Einrichten
@@ -43,7 +40,7 @@
Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen.
%1$s darf den freigegebenen Inhalt nicht nutzen.
Lade hoch
- Es sind keine Dateien im Verzeichnis vorhanden.\nNeue Dateien können mit der Menüfunktion «Hochladen» hinzugefügt werden.
+ Alles leer. Laden Sie etwas hoch!
Klicken Sie auf eine Datei für weitere Informationen.
Grösse:
Art:
@@ -90,14 +87,11 @@
Synchronisationsdateien konnten nicht synchronisiert werden.
Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)
Einige lokale Dateien wurden vergessen
- %1$d Dateien aus dem Verzeichnis %2$s konnten nicht kopiert werden nach
- «Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschliessen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.
Verschiebe alle
Alle Dateien wurden verschoben
Einige Dateien konnten nicht verschoben werden
Lokal: %1$s
Remote: %1$s
- Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie sie stattdessen verschieben?
Bitte geben Sie Ihre App-PIN ein
Bitte geben Sie Ihre App-PIN ein
PIN-Abfrage erfolgt nach Starten der App.
@@ -148,8 +142,6 @@
Datei aktuell halten
Umbenennen
Löschen
- Möchten Sie %1$s wirklich löschen?
- Möchten Sie wirklich %1$s und dessen Inhalte entfernen?
Nur lokal
Nur lokale Inhalte
Vom Server entfernen
@@ -161,7 +153,6 @@
Die Umbenennung konnte nicht abgeschlossen werden.
Die entfernte Datei konnte nicht überprüft werden
Dateiinhalte bereits synchronisiert
- Das Verzeichnis konnte nicht erstellt werden.
Bitte warten Sie einen Moment.
Ein unerwartetes Problem ist aufgetreten. Bitte versuchen Sie, die Datei in einer anderen App zu öffnen.
Es wurde keine Datei ausgewählt.
@@ -202,17 +193,10 @@
Ãœberschreiben
Nicht hochladen
Bildvorschau
- Dieses Bild kann nicht angezeigt werden
- %1$s konnte nicht in den lokalen %2$s Ordner kopiert werden
- Sofort Upload fehlgeschlagen»
- Sofortige Uploads fehlgeschlagen
- Zusammenfassung aller fehlgeschlagenen Uploads
- Alle auswählen
- Versuche alle ausgewählten erneut
- Lösche alle ausgewählten aus der Uploadwarteschlange
- Bildupload erneut versuchen:
- Lade weitere Bilder
- Nicht durchgeführt - Nicht online für sofortigen Upload
- Fehlermeldung:
- Bitte überprüfen Sie Ihre Serverkonfiguration. Vielleicht ist Ihr Nutzungslimit überschritten.
+ Senden
+ In die Zwischenablage kopiert
+
+ Konten
+ Auswählen
+ Sicherheit
diff --git a/res/values-de-rDE/strings.xml b/res/values-de-rDE/strings.xml
index 5421ae0418..70bd98fa03 100644
--- a/res/values-de-rDE/strings.xml
+++ b/res/values-de-rDE/strings.xml
@@ -7,37 +7,40 @@
Inhalt von anderen Apps
Dateien
Öffnen mit
- Ordner anlegen
+ Neuer Ordner
Einstellungen
Details
+ Senden
Allgemein
Mehr
Konten
Konten verwalten
App-PIN
Schützen Sie Ihren Client
- Aktiviert den sofortigen Upload
- Laden Sie Ihre Fotos von der Kamera sofort hoch
+ Sofortiges Bilderhochladen
+ Fotos von der Kamera sofort hochladen
+ Sofortiges Videohochladen
+ Videos von der Kamera sofort hochladen
Protokollierung aktivieren
- Dies wird zur Protokollierung von Problemen genutzt
+ Dieses wird zur Protokollierung von Problemen benutzt
Protokollierungsverlauf
- Dies zeigt die gespeicherten Protokollierungen
+ Dieses zeigt die gespeicherten Protokollierungen
Verlauf löschen
Hilfe
- Empfehlen Sie dies einem Freund
+ Dieses einem Freund empfehlen
Rückmeldungen
Impressum
- Probieren Sie %1$s auf Ihrem Smartphone!
- Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nLaden Sie es hier herunter: %2$s
+ %1$s auf Ihrem Smartphone ausprobieren!
+ Ich möchte Sie zum Benutzen von %1$s auf Ihrem Smartphone einladen!\nHier herunterladen: %2$s
Server überprüfen
- Adresse des Servers
+ Server-Adresse https://…
Benutzername
Passwort
Ist %1$s neu für Sie?
Dateien
Verbinden
Hochladen
- Wähle Zielordner:
+ Zielordner auswählen:
Kein Konto gefunden
Es sind keine %1$s-Konten auf Ihrem Gerät eingerichtet. Bitte richten Sie zuerst ein Konto ein.
Einrichten
@@ -46,7 +49,9 @@
Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen.
%1$s darf den freigegebenen Inhalt nicht nutzen.
Lade hoch
- Es sind keine Dateien im Verzeichnis vorhanden.\nNeue Dateien können mit der Menüfunktion \"Hochladen\" hinzugefügt werden.
+ Alles leer. Laden Sie etwas hoch!
+ Ladevorgang …
+ Es befinden sich keine Dateien in diesem Ordner.
Klicken Sie auf eine Datei für weitere Informationen.
Größe:
Art:
@@ -55,6 +60,8 @@
Herunterladen
Datei aktualisieren
Datei wurde wärend des Uploads zu %1$s umbenannt
+ Link teilen
+ Link nicht mehr teilen
Ja
Nein
OK
@@ -77,6 +84,7 @@
%1$s wurde(n) erfolgreich hochgeladen
Hochladen fehlgeschlagen
Hochladen von %1$s konnte nicht abgeschlossen werden
+ Hochladen fehlgeschlagen, Sie müssen sich nochmals anmelden
Herunterladen...
%1$d%% Herunterladen %2$s
Herunterladen erfolgreich
@@ -84,8 +92,10 @@
Herunterladen fehlgeschlagen
Herunterladen von %1$s konnte nicht abgeschlossen werden
Noch nicht heruntergeladen
+ Herunterladen fehlgeschlagen, Sie müssen sich nochmals anmelden
Konto auswählen
Synchronisation fehlgeschlagen
+ Synchronisation fehlgeschlagen, Sie müssen sich neu anmelden
Bei der Synchronisation konnte %1$s nicht übertragen werden
Ungültiges Passwort für %1$s
Konflikte gefunden
@@ -93,15 +103,15 @@
Synchronisationsdateien konnten nicht synchronisiert werden.
Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)
Einige lokale Dateien wurden vergessen
- %1$d Dateien aus dem Verzeichnis %2$s konnten nicht kopiert werden nach
- \"Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.
+ %1$d Dateien aus dem %2$s Ordner konnten nicht kopiert werden nach
+ Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Sie können die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.
Das Verzeichnis %1$s existiert nicht mehr
Verschiebe alle
Alle Dateien wurden verschoben
Einige Dateien konnten nicht verschoben werden
Lokal: %1$s
Remote: %1$s
- Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie sie stattdessen verschieben?
+ Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchten Sie diese stattdessen verschieben?
Bitte geben Sie Ihre App-PIN ein
Bitte geben Sie Ihre App-PIN ein
PIN-Abfrage erfolgt nach Starten der App.
@@ -130,11 +140,12 @@
Zurückspulen Button
Abspielen oder Pausieren Button
Vorspulen Button
- Anmeldungsversuch...
+ Legitimierung empfangen …
+ Anmeldeversuch …
Keine Netzwerkverbindung
Sichere Verbindung nicht verfügbar.
Verbindung hergestellt
- Verbindung testen...
+ Verbindungstest …
Fehlerhafte Server Konfiguration
Ein Benutzerkonto für den gleichen Benutzer und Server existiert auf diesem Gerät bereits
Der eingegebene Benutzer passt nicht zu dem Benutzer dieses Benutzerkontos
@@ -149,15 +160,18 @@
Konnte keine Verbindung aufbauen.
Sichere Verbindung hergestellt
Falscher Benutzername oder Passwort
- Autorisierung nicht erfolgreich
- Zugriff durch den Autorisierungsserver abgelehnt
- Unerwarteter Zustand; bitte geben Sie die URL des Servers nochmals ein
- Ihre Autorisierung ist abgelaufen. Bitte Autorisierung nochmals durchführen
+ Legitimierung nicht erfolgreich
+ Zugriff durch den Legitimierungsserver abgelehnt
+ Unerwarteter Zustand; bitte geben Sie die Adresse des Servers nochmals ein
+ Ihre Legitimierung ist abgelaufen. Bitte Legitimierung nochmals durchführen
Bitte geben Sie Ihr aktuelles Passwort ein
Ihre Sitzung ist abgelaufen. Bitte Anmeldung nochmals durchführen
- Verbinde mit dem Authentifizierung-Server…
- Der Server unterstützt diese Authentifizierung-Methode nicht
+ Zum Legitimierungsserver wird verbunden …
+ Der Server unterstützt diese Legitimierungsmethode nicht
%1$s unterstützt nicht mehrere Benutzerkonten
+ Ihr Server gibt keine richtige Benutzerkennung zurück, bitte kontaktieren Sie einen Administrator
+⇥
+ Die Legitimierung gegenüber dem Server konnte nicht durchgeführt werden
Datei aktuell halten
Umbenennen
Löschen
@@ -174,12 +188,15 @@
Die Umbenennung konnte nicht abgeschlossen werden.
Die entfernte Datei konnte nicht überprüft werden
Dateiinhalte bereits synchronisiert
- Das Verzeichnis konnte nicht erstellt werden.
+ Ordner konnte nicht erstellt werden
+ Verbotene Zeichen: / \\ < > : \" | ? *
+ Dateiname darf nicht leer sein
Bitte warten Sie einen Moment.
Ein unerwartetes Problem ist aufgetreten. Bitte versuchen Sie, die Datei in einer anderen App zu öffnen.
Es wurde keine Datei ausgewählt.
+ Link senden an …
Anmelden mit oAuth2
- Verbinde mit dem oAuth2-Server…
+ Mit dem oAuth2-Server wird verbunden …
Die Identität der Website konnte nicht überprüft werden
- Das Zertifikat des Servers ist nicht vertrauenswürdig
- Das Zertifikat des Servers ist abgelaufen
@@ -202,6 +219,8 @@
An:
Signatur:
Algorithmus:
+ Das Zertifikat konnte nicht angezeigt werden.
+ - Keine Informationen über den Fehler
Dies ist ein Platzhalter
platzhalter.txt
PNG Bild
@@ -209,6 +228,7 @@
18.05.2012 12:23
12:23:45
Fotos nur über WiFi hochladen
+ Videos nur über WiFi hochladen
/SofortUpload
Konflikt beim Update
Serverdatei %s ist nicht synchronisiert mit der lokalen Datei. Weitermachen bedeutet, dass der Inhalt der Datei auf dem Server ersetzt wird.
@@ -218,15 +238,47 @@
Bildvorschau
Dieses Bild kann nicht angezeigt werden
%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden
- Sofort Upload fehlgeschlagen\"
- Sofortige Uploads fehlgeschlagen
- Zusammenfassung aller fehlgeschlagenen Uploads
- Alle auswählen
- Versuche alle ausgewählten erneut
- Lösche alle ausgewählten aus der Uploadwarteschlange
- Bildupload erneut versuchen:
- Lade weitere Bilder
- Nicht durchgeführt - Nicht online für sofortigen Upload
- Fehlermeldung:
- Bitte überprüfen Sie Ihre Serverkonfiguration. Vielleicht ist Ihr Nutzungslimit überschritten.
+ Pfad hochladen
+ Entschuldigung, Freigaben sind auf Ihrem Server nicht aktiviert. Bitte kontaktieren Sie Ihren
+⇥⇥Administrator.
+ Teilen nicht möglich. Prüfen Sie, dass die Datei existiert
+ Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten.
+ Entfernen der Freigabe nicht möglich. Prüfen Sie, dass die Datei existiert
+ Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten.
+ Senden
+ Link kopieren
+ In die Zwischenablage kopiert
+ Kritischer Fehler: Operationen können nicht ausgeführt werden
+ Es ist ein Fehler beim Verbinden mit dem Server aufgetreten.
+ Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden
+ Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden
+ Die Operation kann nicht abgeschlossen werden, der Server ist nicht erreichbar
+
+ Sie haben keine Berechtigung %s
+ diese Datei umzubenennen
+ diese Datei zu löschen
+ diese Datei zu teilen
+ diese Datei nicht mehr zu teilen
+ eine Datei zu erstellen
+ in diesem Order etwas hochzuladen
+ Diese Datei steht auf dem Server nicht mehr zur Verfügung
+ Konten
+ Konto hinzufügen
+ Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet.
+ Protokolle
+ Verlauf senden
+ Protokolle der ownCloud-Android-App
+ Daten werden geladen …
+ Legitimierung benötigt
+ Falsches Passwort
+ Verschieben
+ Nichts vorhanden. Sie können einen Ordner hinzufügen!
+ Auswählen
+ Verschieben nicht möglich. Bitte überprüfen Sie, ob die Datei existiert
+ Es ist nicht möglich einen Ordner eine Ebene tiefer zu verschieben
+ Die Datei ist bereits im Zielordner vorhanden
+ Es ist ein Fehler beim Verschieben dieser Datei oder dieses Ordners aufgetreten.
+ um diese Datei zu verschieben
+ Sofortiges Hochladen
+ Sicherheit
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 4edae556ab..028b6bc6a0 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -7,17 +7,20 @@
Inhalt von anderen Apps
Dateien
Öffnen mit
- Ordner anlegen
+ Neuer Ordner
Einstellungen
Details
+ Senden
Allgemein
Mehr
Konten
Konten verwalten
App-PIN
Schütze Deinen Client
- Aktiviert den sofortigen Upload
- Lade Deine Fotos von der Kamera sofort hoch
+ Sofortiger Bilder-Upload
+ Lade Fotos von der Kamera sofort hoch
+ Sofortiger Video-Upload
+ Lade Videos von der Kamera sofort hoch
Protokollierung aktivieren
Dies wird zur Protokollierung von Problemen genutzt
Protokollierungsverlauf
@@ -30,14 +33,14 @@
Probiere %1$s auf Deinem Smartphone!
Ich möchte Dich zum Benutzen von %1$s auf Deinem Smartphone einladen!\nLade es hier herunter: %2$s
Überprüfe den Server
- Adresse des Servers
+ Server-Adresse https://…
Benutzername
Passwort
Ist %1$s neu für dich?
Dateien
Verbinden
Hochladen
- Wähle einen Ordner zum hochladen:
+ Wähle Zielordner:
Kein Account gefunden
Es sind keine %1$s-Accounts auf Deinem Gerät eingerichtet. Bitte richte zuerst ein Konto ein.
Einrichten
@@ -46,7 +49,9 @@
Es wurden keine Inhalte empfangen. Es gibt nichts zum Hochladen.
%1$s darf den freigegebenen Inhalt nicht nutzen.
Lade hoch
- Es sind keine Dateien im Verzeichnis vorhanden.\nNeue Dateien können mit der \"Hochladen\" Menüfunktion hinzugefügt werden.
+ Alles leer. Lade etwas hoch!
+ Ladevorgang …
+ Es befinden sich keine Dateien in diesem Ordner.
Klicken Sie auf eine Datei für weitere Informationen.
Größe:
Art:
@@ -55,6 +60,8 @@
Herunterladen
Datei aktualisieren
Datei wurde wärend des Uploads zu %1$s umbenannt
+ Link Teilen
+ Link nicht mehr freigeben
Ja
Nein
OK
@@ -77,6 +84,7 @@
%1$s wurde(n) erfolgreich hochgeladen
Hochladen fehlgeschlagen
Hochladen von %1$s konnte nicht abgeschlossen werden
+ Hochladen fehlgeschlagen, Du musst dich nochmals anmelden
Herunterladen...
%1$d%% Herunterladen %2$s
Herunterladen erfolgreich
@@ -84,8 +92,10 @@
Herunterladen fehlgeschlagen
Herunterladen von %1$s konnte nicht abgeschlossen werden
Noch nicht Heruntergeladen
+ Herunterladen fehlgeschlagen, Du musst dich nochmals anmelden
Account auswählen
Synchronisation fehlgeschlagen
+ Synchronisation fehlgeschlagen, Du musst Dich neu anmelden
Bei der Synchronisation konnte %1$s nicht übertragen werden
Falsches Passwort für %1$s
Konflikte gefunden
@@ -93,15 +103,15 @@
Synchron halten schlug fehl.
Inhalte von %1$d konnte nicht synchronisiert werden (%2$d Konflikte)
Einige lokale Dateien wurden vergessen
- %1$d Dateien aus dem Verzeichnis %2$s konnten nicht kopiert werden nach
- \"Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Du kannst die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den %1$s Ordner verschieben und den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.
+ %1$d Dateien aus dem %2$s Verzeichnis konnten nicht kopiert werden nach
+ Mit Version 1.3.16 werden Dateien die von diesem Gerät aus hochgeladen werden in den lokalen Ordner %1$s kopiert um Datenverlust zu vermeiden, wenn eine einzelne Datei mit mehreren Accounts synchronisiert wird.\n\nInfolge dieser Änderung wurden alle Dateien, die mit vorherigen Versionen dieser App hochgeladen wurden, in den Ordner %2$s verschoben. Jedoch ist während der Account-Synchronisation ein Fehler aufgetreten, der das Abschließen dieses Vorgangs verhindert. Du kannst die Datei(en) entweder wie sie sind belassen und den Link zu %3$s entfernen oder die Datei(en) in den Ordner %1$s verschieben und den Link zu %4$s beibehalten.\n\nUnten befindet sich eine Liste der lokalen Datei(en) und der mit ihnen verbundenen Remote-Datei(en) in %5$s.
Das Verzeichnis %1$s existiert nicht mehr
Verschiebe alle
Alle Dateien wurden verschoben
Einige Dateien konnten nicht verschoben werden
Lokal: %1$s
Remote: %1$s
- Es steht nicht genügend Speicherplatz zur Verfügung, um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchtest Du sie stattdessen verschieben?
+ Es steht nicht genügend Speicherplatz zur Verfügung um die ausgewählten Dateien in den %1$s Ordner zu kopieren. Möchtest du diese stattdessen verschieben?
Bitte gib Deine App-PIN ein
Bitte gib Deine App-PIN ein
PIN-Abfrage erfolgt nach Starten der App.
@@ -130,6 +140,7 @@
Zurückspielen Knopf
Play-/Pause Knopf
Vorspulen Knopf
+ Autorisierung empfangen...
Anmeldungsversuch...
Keine Netzwerkverbindung
Sichere Verbindung nicht verfügbar.
@@ -152,12 +163,15 @@
Autorisierung nicht erfolgreich
Zugriff durch den Autorisierungsserver abgelehnt
Unerwarteter Zustand; bitte gib die URL des Servers nochmals ein
- Ihre Autorisierung ist abgelaufen. Bitte Autorisierung nochmals durchführen
+ Deine Autorisierung ist abgelaufen. Bitte Autorisierung nochmals durchführen
Bitte gib dein aktuelles Passwort ein
- Ihre Sitzung ist abgelaufen. Bitte Anmeldung nochmals durchführen
+ Deine Sitzung ist abgelaufen. Bitte Anmeldung nochmals durchführen
Verbinde mit dem Authentifizierung-Server…
Der Server unterstützt diese Authentifizierung-Methode nicht
%1$s unterstützt nicht mehrere Benutzerkonten
+ Dein Server gibt keine korrekte Benutzer-ID zurück, bitte kontaktiere einen Administrator
+
+ Die Authentifizierung gegenüber dem Server konnte nicht durchgeführt werden
Datei aktuell halten
Umbenennen
Löschen
@@ -174,10 +188,13 @@
Die Umbenennung konnte nicht abgeschlossen werden.
Die entfernte Datei konnte nicht überprüft werden
Dateiinhalte bereits synchronisiert
- Das Verzeichnis konnte nicht erstellt werden.
+ Verzeichnis konnte nicht erstellt werden
+ Verbotene Zeichen: / \\ < > : \" | ? *
+ Dateiname darf nicht leer sein
Bitte warte einen Moment.
Ein unerwartetes Problem ist aufgetreten. Bitte versuche, die Datei in einer anderen App zu öffnen
Es wurde keine Datei ausgewählt.
+ Link senden an ...
Anmelden mit oAuth2
Verbinde mit dem oAuth2-Server.
Die Identität der Website konnte nicht überprüft werden
@@ -202,6 +219,8 @@
Bis:
Signatur:
Algorithmus:
+ Das Zertifikat konnte nicht gezeigt werden.
+ - Keine Informationen über den Fehler
Dies ist ein Platzhalter
platzhalter.txt
PNG-Bild
@@ -209,6 +228,7 @@
18.5.2012 12:23
12:23:45
Fotos nur über WiFi hochladen
+ Videos nur über WiFi hochladen
/SofortUpload
Konflikt beim Update
Serverdatei %s ist nicht synchronisiert mit der lokalen Datei. Weitermachen bedeutet, dass der Inhalt der Datei auf dem Server ersetzt wird.
@@ -218,15 +238,47 @@
Bildvorschau
Dieses Bild kann nicht angezeigt werden
%1$s konnte nicht in den lokalen %2$s Ordner kopiert werden
- Fehlgeschlagener SofortUpload\"
- SofortUpload fehlgeschlagen
- Ãœbersicht aller fehlgeschlagenen SofortUploads
- Alles auswählen
- Alles auswählen erneut versuchen
- Auswahl aus der Upload Warteschlange entfernen
- Hochladen des Bildes erneut versuchen:
- Weitere Bilder laden
- Nicht durchgeführt - Nicht online für sofortigen Upload
- Fehlermeldung:
- Bitte überprüfe Deine Servereinstellungen. Eventuell ist Dein Nutzungslimit überschritten.
+ Pfad hochladen
+ Entschuldigung, Freigaben sind auf Deinem Server nicht aktiviert. Bitte kontaktiere Deinen
+⇥⇥Administrator.
+ Teilen nicht möglich. Prüfe, dass die Datei existiert
+ Es ist ein Fehler beim Freigeben der Datei oder des Ordners aufgetreten.
+ Entfernen der Freigabe nicht möglich. Prüfe, dass die Datei existiert
+ Es ist ein Fehler beim Entfernen der Freigabe für diese Datei oder den Ordner aufgetreten.
+ Senden
+ Link kopieren
+ In die Zwischenablage kopiert
+ Kritischer Fehler: Operationen können nicht ausgeführt werden
+ Es ist ein Fehler beim Verbinden mit dem Server aufgetreten.
+ Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden
+ Es ist ein Fehler beim Warten auf den Server aufgetreten, die Operation kann nicht ausgeführt werden
+ Die Operation kann nicht abgeschlossen werden, der Server ist nicht erreichbar
+
+ Du hast keine Berechtigung %s
+ diese Datei umzubenennen
+ diese Datei zu löschen
+ diese Datei zu teilen
+ diese Datei nicht mehr zu teilen
+ eine Datei zu erstellen
+ in diesem Order etwas hochzuladen
+ Diese Datei steht auf dem Server nicht mehr zur Verfügung
+ Konten
+ Konto hinzufügen
+ Die gesicherte Verbindung wird auf eine unsichere Route weitergeleitet.
+ Protokolle
+ Verlauf senden
+ Protokolle der ownCloud-Android-App
+ Daten werden geladen …
+ Legitimierung benötigt
+ Falsches Passwort
+ Verschieben
+ Nichts vorhanden. Du kannst einen Ordner hinzufügen!
+ Auswählen
+ Verschieben nicht möglich. Prüfe, dass die Datei existiert
+ Es ist nicht möglich, einen Ordner in einen seiner Unterordner zu verschieben
+ Die Datei ist bereits im Zielordner vorhanden
+ Es ist ein Fehler beim Verschieben der Datei oder des Ordners aufgetreten.
+ um diese Datei zu verschieben
+ Sofortiges Hochladen
+ Sicherheit
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 0837a49aa9..94e35a6b9c 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -1,43 +1,57 @@
- %1$s ΕφαÏμογή για Android
+ ΕφαÏμογή %1$s Android
Îκδοση %1$s
+ ΑνανÎωση λογαÏιασμοÏ
ΜεταφόÏτωση
ΠεÏιεχόμενο από άλλες εφαÏμογÎÏ‚
ΑÏχεία
Άνοιγμα με
- ΔημιουÏγία καταλόγου
+ ÎÎος φάκελος
Ρυθμίσεις
ΛεπτομÎÏειες
+ Αποστολή
Γενικά
ΠεÏισσότεÏα
ΛογαÏιασμοί
- ΔιαχείÏιση λογαÏιασμών
- PIN της εφαÏμογής
- Î ÏοστατÎψτε την εφαÏμογή
- ΕνεÏγοποιήστε την άμεση μεταφόÏτωση
- Άμεση μεταφόÏτωση των φωτογÏαφιών που Ï„Ïαβάει η φωτογÏ. μηχανή
+ ΔιαχείÏιση ΛογαÏιασμών
+ PIN εφαÏμογής
+ Î ÏοστατÎψτε το δÎκτη σας
+ Στιγμιαίες μεταφοÏτώσεις εικόνων
+ ΜεταφοÏτώστε απευθείας φωτογÏαφίες από την κάμεÏα
+ Στιγμιαίες μεταφοÏτώσεις βίντεο
+ Άμεση μεταφόÏτωση των βίντεο από την φωτογÏαφική μηχανή
+ ΕνεÏγοποίηση ΚαταγÏαφής ΙστοÏικοÏ
+ ΧÏησιμοποιείται για την καταγÏαφή Ï€Ïοβλημάτων
+ ΙστοÏικό ΚαταγÏαφής
+ Εδώ μποÏείτε να δείτε το καταγεγÏαμμÎνο ιστοÏικό
ΔιαγÏαφή ΙστοÏικοÏ
Βοήθεια
+ Î Ïοτείνετε σε φίλο
Σχόλια
ΑποτÏπωμα
+ Δοκιμάστε %1$s στο κινητό σας!
+ Θα ήθελα να σε Ï€ÏοσκαλÎσω να χÏησιμοποιήσεις το %1$s στο κινητό σου!\nΛήψη εδώ: %2$s
Έλεγχος Διακομιστή
- ΔιεÏθυνση εξυπηÏÎτη
+ ΔιεÏθυνση διακομιστή https://…
Όνομα χÏήστη
Συνθηματικό
+ ÎÎοι στο %1$s;
ΑÏχεία
ΣÏνδεση
ΜεταφόÏτωση
- ΕπιλÎξτε κατάλογο ανεβάσματος
+ ΕπιλÎξτε φάκελο μεταφοÏτώσεων:
Δεν βÏÎθηκε λογαÏιασμός
Δεν υπάÏχουν λογαÏιασμοί %1$s στη συσκευή σας. ΠαÏακαλώ Ïυθμίστε Ï€Ïώτα Îνα λογαÏιασμό.
ΡÏθμιση
- Κλείσιμο
+ Έξοδος
Δεν υπάÏχει πεÏιεχόμενο για να μεταφοÏτώσετε
Δεν ελήφθη πεÏιεχόμενο. Δεν υπάÏχει τίποτα να μεταφοÏτώσετε.
- Το %1$s δεν επιτÏÎπεται να Îχει Ï€Ïόσβαση στο κοινόχÏηστο πεÏιεχόμενο
+ Ο %1$s δεν επιτÏÎπεται να Îχει Ï€Ïόσβαση στο κοινόχÏηστο πεÏιεχόμενο
ΜεταφόÏτωση
- Δεν υπάÏχουν αÏχεία σε αυτόν τον φάκελο.\nÎÎα αÏχεία μποÏοÏν να Ï€ÏοστεθοÏν με την επιλογή \"ΜεταφόÏτωση\" του μενοÏ.
+ Δεν υπάÏχει τίποτα εδώ. Ανεβάστε κάτι!
+ ΦόÏτωση ...
+ Δεν υπάÏχουν αÏχεία σε αυτό τον φάκελο.
Αγγίξτε κάποιο αÏχείο για να Ï€Ïοβάλετε πεÏισσότεÏες πληÏοφοÏίες.
ÎœÎγεθος:
ΤÏπος:
@@ -45,125 +59,168 @@
ΤÏοποποιήθηκε:
Λήψη
ΑνανÎωση αÏχείου
- Το αÏχείο μετονομάστηκε σε %1$s κατά την μεταφόÏτωση
+ Το αÏχείο μετονομάστηκε σε %1$s κατά τη μεταφόÏτωση
+ ΔιαμοιÏασμός συνδÎσμου
+ ΑκÏÏωση διαμοιÏÎ±ÏƒÎ¼Î¿Ï ÏƒÏ…Î½Î´Îσμου
Îαι
Όχι
ΟΚ
ΑκÏÏωση λήψης
- ΑκÏÏωση αποστολής
+ ΑκÏÏωση μεταφόÏτωσης
ΆκυÏο
Αποθήκευση & Έξοδος
Σφάλμα
ΦόÏτωση ...
Άγνωστο σφάλμα
Σχετικά
- Αλλαγή συνθηματικοÏ
+ Αλλαγή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Ï€Ïόσβασης
ΔιαγÏαφή λογαÏιασμοÏ
ΔημιουÏγία λογαÏιασμοÏ
ΜεταφόÏτωση από ...
- Όνομα καταλόγου
- ΜεταφοÏτώνεται ...
+ Όνομα φακÎλου
+ ΜεταφόÏτωση ...
%1$d%% ΜεταφοÏτώνονται %2$s
Η μεταφόÏτωση ολοκληÏώθηκε επιτυχώς
Το %1$s μεταφοÏτώθηκε με επιτυχία
Η μεταφόÏτωση απÎτυχε
Η μεταφόÏτωση του %1$s δεν ήταν δυνατόν να ολοκληÏωθεί
- ΚατÎβασμα ...
+ Η μεταφόÏτωση απÎτυχε, Ï€ÏÎπει να επανασυνδεθείτε
+ Λήψη ...
%1$d%% Λαμβάνονται %2$s
- Το κατÎβασμα ολοκληÏώθηκε επιτυχώς
+ Η λήψη ολοκληÏώθηκε επιτυχώς
%1$s αÏχεία λήφθηκαν με επιτυχία
- Το κατÎβασμα απÎτυχε
- Η λήψη του %1$s δεν μπόÏεσε να ολοκληÏωθεί με επιτυχία
+ Η λήψη απÎτυχε
+ Η λήψη του %1$s δεν μπόÏεσε να ολοκληÏωθεί
+ Δεν Îχει ληφθεί ακόμα
+ Η λήψη απÎτυχε, Ï€ÏÎπει να επανασυνδεθείτε
Επιλογή λογαÏιασμοÏ
Ο συγχÏονισμός απÎτυχε
- Ο συγχÏονισμός του %1$s δεν μπόÏεσε να ολοκληÏωθεί
+ Ο συγχÏονισμός απÎτυχε, χÏειάζετε να επανασυνδεθείτε
+ Ο συγχÏονισμός του %1$s δεν μπόÏεσε να ολοκληÏωθεί
Λάθος κωδικός για %1$s
- Î’ÏÎθηκαν διενÎξεις
- %1$d αÏχεία σε αναμονή συγχÏονισμοÏ, δεν μπόÏεσαν να συγχÏονιστοÏν
+ Î’ÏÎθηκαν συγκÏοÏσεις
+ %1$d αÏχεία σε αναμονή συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Î´ÎµÎ½ μπόÏεσαν να συγχÏονιστοÏν
Τα αÏχεία σε αναμονή συγχÏÎ¿Î½Î¹ÏƒÎ¼Î¿Ï Î±Ï€Îτυχαν
Τα πεÏιεχόμενα των %1$d αÏχείων δεν μπόÏεσαν να συγχÏονιστοÏν (%2$d διενÎξεις)
ΟÏισμÎνα τοπικά αÏχεία ξεχάστηκαν
- %1$d αÏχεια απο τον %2$s χωÏο αποθηκευσης δεν μποÏουν να αντιγÏαφθουν σε
- Μετακινηση ολων
- Ολα τα αÏχεια μετακινηθηκαν
- ΜεÏικα αÏχεια δεν μποÏεσαν να μετακινηθουν
- Τοπικα: %1$s
- Remote: %1$s
- Δεν υπαÏχει αÏκετος χωÏος για να αντιγÏαφθουν τα επιλεγμενα αÏχεια στον χωÏο αποθηκευσης %1$s. Θελετε να μετακινηθουν μεÏικα?
- ΠαÏακαλώ, εισάγετε το PIN σας
+ %1$d αÏχεία από τον %2$s χώÏο αποθήκευσης δεν ήταν δυνατό να αντιγÏαφοÏν σε
+ Από την Îκδοση 1.3.16, τα αÏχεία που μεταφοÏτώθηκαν από αυτήν τη συσκευή αντιγÏάφηκαν στον τοπικό φάκελο %1$s για να αποτÏαπεί η απώλεια δεδομÎνων όταν Îνα αÏχείο είναι συγχÏονισμÎνο με πολλαπλοÏÏ‚ λογαÏιασμοÏÏ‚. \n\nΛόγω αυτής της αλλαγής, όλα τα αÏχεία που μεταφοÏτώθηκαν με Ï€ÏοηγοÏμενες εκδόσεις αυτής της εφαÏμογής αντιγÏάφηκαν στον φάκελο %2$s. Ωστόσο, Îνα σφάλμα εμπόδισε την ολοκλήÏωση αυτής της λειτουÏγίας κατά το συγχÏονισμό του λογαÏιασμοÏ. ΜποÏείτε είτε να αφήσετε το(α) αÏχείο(α) όπως είναι και να καταÏγήσετε τη σÏνδεση με το %3$s ή να μετακινήσετε τα αÏχεία στο φάκελο %1$s και να διατηÏήσετε τη σÏνδεση με το %4$s. \n\nΑπαÏιθμημÎνα πιο κάτω είναι τα τοπικά αÏχεία(ο) και τα απομακÏυσμÎνα αÏχεία(ο) στο %5$s με τα οποία συνδÎονταν.
+ Ο φάκελος %1$s δεν υπάÏχει πια
+ Μετακίνηση όλων
+ Όλα τα αÏχεία μετακινήθηκαν
+ ΜεÏικά αÏχεία δεν μπόÏεσαν να μετακινηθοÏν
+ Τοπικά: %1$s
+ ΑπομακÏυσμÎνα: %1$s
+ Δεν υπάÏχει αÏκετός διαθÎσιμος αποθηκευτικός χώÏος για να αντιγÏαφοÏν τα επιλεγμÎνα αÏχεία στον φάκελο %1$s. Θα θÎλατε να τα μετακινήσετε αντί αυτοÏ;
+ ΠαÏακαλώ, εισάγετε το PIN εφαÏμογής σας
Εισάγετε το PIN της εφαÏμογής
- Το PIN θα ζητείται κάθε φοÏά στην εκκίνηση
- ΠαÏακαλώ επαναεισάγετε το PIN της εφαÏμογής
+ Το PIN θα ζητείται κάθε φοÏά που εκκινείται η εφαÏμογή
+ ΠαÏακαλώ επανεισάγετε το PIN της εφαÏμογής
ΑφαιÏÎστε τον PIN της εφαÏμογής
Δεν ταιÏιάζουν τα PIN της εφαÏμογής
ΕσφαλμÎνο PIN της εφαÏμογής
ΑφαιÏÎθηκε το PIN της εφαÏμογής
Το PIN της εφαÏμογής αποθηκεÏτηκε
+ %1$s αναπαÏαγωγή μουσικής
+ %1$s (αναπαÏαγωγή)
+ %1$s (φόÏτωση)
+ %1$s αναπαÏαγωγή τελείωσε
Δεν βÏÎθηκε αÏχείο πολυμÎσων
Δεν δόθηκε λογαÏιασμός
+ Το αÏχείο δεν βÏίσκεται σε ÎγκυÏο λογαÏιασμό
+ Αυτή η μοÏφή κωδικοποιήσης πολυμÎσων δεν υποστηÏίζεται
Το αÏχείο πολυμÎσων δεν μπόÏεσε να διαβαστεί
- Το αÏχείο πολυμÎσων δεν είναι σωστά κοδικοποιημÎνο
+ Το αÏχείο πολυμÎσων δεν είναι κωδικοποιημÎνο σωστά
+ Λήξη χÏόνου κατά την Ï€Ïοσπάθεια αναπαÏαγωγής
+ Το αÏχείο πολυμÎσων δεν μποÏεί να μεταδοθεί
+ Το αÏχείο πολυμÎσων δεν μποÏεί να αναπαÏαχθεί με την παÏεχόμενη εφαÏμογή αναπαÏαγωγής πολυμÎσων
+ Σφάλμα ασφαλείας κατά την Ï€Ïοσπάθεια αναπαÏαγωγής του %1$s
+ Σφάλμα εισόδου κατά την Ï€Ïοσπάθεια αναπαÏαγωγής του %1$s
+ ΑπÏοσδόκητο σφάλμα κατά την Ï€Ïοσπάθεια αναπαÏαγωγής του %1$s
+ Κουμπί επαναφοÏάς
Κουμπί αναπαÏαγωγής ή παÏσης
+ Κουμπί Ï€Ïοώθησης
+ Λήψη πιστοποίησης...
Î Ïοσπάθεια σÏνδεσης...
Δεν υπάÏχει σÏνδεση στο δίκτυο
Μη διαθÎσιμη ασφαλής σÏνδεση.
ΕπετεÏχθη σÏνδεση
Έλεγχος σÏνδεσης...
- ΛανθασμÎνες Ïυθμίσεις
- ΠαÏουσιάστηκε άγνωστο σφάλμα
- Δεν βÏÎθηκε υπολογιστής
- Δεν βÏÎθηκε στιγμιότυπο server σας
- Ο εξυπηÏετητής αÏγεί Ï€Î¿Î»Ï Î½Î± απαντήσει
+ ΛανθασμÎνες Ïυθμίσεις διακομιστή
+ Ένας λογαÏιασμός για τον ίδιο χÏήστη και διακομιστή υπάÏχει ήδη στη συσκευή
+ Ο χÏήστης που εισάγατε δεν ταιÏιάζει με το χÏήστη Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… λογαÏιασμοÏ
+ ΠαÏουσιάστηκε άγνωστο σφάλμα!
+ Δεν βÏÎθηκε κόμβος
+ Δεν βÏÎθηκε εγκατεστημÎνος διακομιστής
+ Ο διακομιστής αÏγεί Ï€Î¿Î»Ï Î½Î± απαντήσει
Κακώς διατυπωμÎνο URL
Η αÏχικοποίηση του SLL απÎτυχε
- Μη αναγνωÏίσιμη Îκδοση διακομιστή server σας
+ Αδυναμία επιβεβαίωσης της ταυτότητας του διακομιστή SSL
+ Μη-αναγνωÏίσιμη Îκδοση διακομιστή
Δεν ήταν δυνατή η σÏνδεση
ΕπιτεÏχθηκε ασφαλής σÏνδεση
Λάθος όνομα χÏήστη ή κωδικός
Η πιστοποίηση απÎτυχε
- ΠαÏακαλώ είσάγετε τον Ï„ÏÎχοντα κωδικό
- ΔιατήÏηση αÏχείου ενημεÏωμÎνo
+ Ο διακομιστής πιστοποίησης αÏνήθηκε την Ï€Ïόσβαση
+ ΑπÏόοπτη κατάσταση - παÏακαλώ εισάγετε τη διεÏθυνση URL του διακομιστή ξανά
+ Η πιστοποιίησή σας Îληξε. ΠαÏακαλώ πιστοποιήστε ξανά
+ ΠαÏακαλώ εισάγετε τον Ï„ÏÎχοντα κωδικό Ï€Ïόσβασης
+ Η συνεδÏία σας Îληξε. ΠαÏακαλώ συνδεθείτε ξανά
+ ΣÏνδεση με το διακομιστή πιστοποίησης σε εξÎλιξη...
+ Ο διακομιστής δεν υποστηÏίζει αυτή τη μÎθοδο πιστοποίησης
+ Ο %1$s δεν υποστηÏίζει πολλαπλοÏÏ‚ λογαÏιασμοÏÏ‚
+ Ο διακομιστής σας δεν επιστÏÎφει το σωστό αναγνωÏιστικό χÏήστη, παÏακαλώ επικοινωνήστε με Îνα διαχειÏιστή
+⇥
+ Δεν είναι δυνατή η πιστοποίηση με αυτόν το διακομιστή
+ ΔιατήÏηση αÏχείου σε ενημÎÏωση
Μετονομασία
ΑφαίÏεση
- ΘÎλετε να αφαιÏÎσετε το %1$s ;
- ΘÎλετε στ\'αλήθεια να διαγÏάψετε το %1$s και τα πεÏιεχόμενά του;
+ ΘÎλετε στ\' αλήθεια να αφαιÏÎσετε το %1$s;
+ ΘÎλετε στ\' αλήθεια να διαγÏάψετε το %1$s και τα πεÏιεχόμενά του;
Μόνο τοπικά
- Μόνο τοπικοί φάκελοι
- ΑφαίÏεση από το εξυπηÏÎτη
- Και απομακÏυσμÎνα και τοπικά
- ΕπιτυχημÎνη αφαίÏεση
- Η αφαίÏεση δεν μποÏεί να ολοκληÏωθεί
+ Μόνο τοπικό πεÏιεχόμενο
+ ΑφαίÏεση από το διακομιστή
+ ΑπομακÏυσμÎνα και τοπικά
+ ΑφαίÏεση επιτυχής
+ Η αφαίÏεση απÎτυχε
Εισάγετε νÎο όνομα
- Το τοπικό αντίγÏαφο δεν ήταν δυνατόν να μετονομαστεί. ΠαÏακαλώ επιλÎξτε νÎο όνομα.
+ Το τοπικό αντίγÏαφο δεν ήταν δυνατόν να μετονομαστεί. ΠαÏακαλώ επιλÎξτε Îνα διαφοÏετικό όνομα.
Η μετονομασία δεν ήταν επιτυχής
Αδυναμία ελÎγχου του απομακÏυσμÎνου αÏχείου
Τα πεÏιεχόμενα του αÏχείου Îχουν ήδη συγχÏονιστεί
- Ο κατάλογος δεν ήταν δυνατόν να δημιουÏγηθεί
+ Η δημιουÏγία φακÎλου απÎτυχε
+ Μη-επιτÏεπόμενοι χαÏακτήÏες: / \\ < > : \" | ? *
+ Το όνομα αÏχείου δεν μποÏεί να είναι κενό.
ΠαÏακαλοÏμε πεÏιμÎνετε
- ΑπÏοσδόκητο σφάλμα, δοκιμάστε με άλλη εφαÏμογή
+ ΑπÏοσδόκητο σφάλμα - παÏακαλώ επιλÎξτε το αÏχείο από μια άλλη εφαÏμογή
Δεν επιλÎχθηκαν αÏχεία
- Η ταυτότητα της σελίδας δεν μποÏεί να εγκÏιθεί
- - Το πιστοποιητικό του διακομιστή δεν είναι αξιόπιστο
+ Αποστολή συνδÎσμου σε ...
+ ΣÏνδεση με oAuth2
+ ΣÏνδεση με το διακομιστή oAuth2 σε εξÎλιξη...
+ Η ταυτότητα της σελίδας δεν μποÏεί να επληθευτεί
+ - Το πιστοποιητικό του διακομιστή δεν είναι Îμπιστο
- Το πιστοποιητικό του διακομιστή Îχει λήξει
- Το πιστοποιητικό του διακομιστή είναι Ï€Î¿Î»Ï Î½Îο
- - Η διεÏθυνση URL δεν ταιÏιάζει με το όνομα στο πιστοποιητικό
- ΘÎλετε να θεωÏείται Îμπιστο το πιστοποιητικό αυτό οÏτως ή άλλως;
+ - Η διεÏθυνση URL δεν ταιÏιάζει με το όνομα του κόμβου στο πιστοποιητικό
+ ΘÎλετε να θεωÏείται Îμπιστο το πιστοποιητικό αυτό παÏ\' όλα αυτά;
Το πιστοποιητικό δεν ήταν δυνατόν να αποθηκευτεί
ΛεπτομÎÏειες
ΑπόκÏυψη
- Εκδόθηκε σε:
+ Εκδόθηκε για:
Εκδόθηκε από:
Κοινό όνομα:
ΟÏγανισμός:
Μονάδα ΟÏγανισμοÏ:
ΧώÏα:
- Πολιτεία
+ Πολιτεία:
Τοποθεσία:
- ΕγκυÏότητα:
+ ΠεÏίοδος ισχÏος:
Από:
- ÎœÎχÏι
+ ÎœÎχÏι:
ΥπογÏαφή:
ΑλγόÏιθμος:
+ Δεν μποÏεί να εμφανιστεί το πιστοποιητικό.
+ - Καμμία πληÏοφοÏία σχετικά με το σφάλμα
Αυτό είναι Îνα σημείο κÏάτησης θÎσης
placeholder.txt
Εικόνα PNG
@@ -171,16 +228,57 @@
2012/05/18 12:23 PM
12:23:45
ΜεταφόÏτωση εικόνων μόνο μÎσω WiFi
+ ΜεταφόÏτωση βίντεο μόνο μÎσω WiFi
/InstantUpload
- ΕνημÎÏωση σÏγκÏουσης
- Το απομακÏυσμÎνο αÏχείο %s δεν είναι συγχÏονισμÎνο με το τοπικό. Η συνÎχεια θα αντικαταστήσει το πεÏιεχόμενο του αÏχείου στον εξυπηÏÎτη.
+ ΣÏγκÏουση ενημεÏώσεων
+ Το απομακÏυσμÎνο αÏχείο %s δεν είναι συγχÏονισμÎνο με το τοπικό αÏχείο. Αν συνεχίσετε θα αντικατασταθεί το πεÏιεχόμενο του αÏχείου στο διακομιστή.
ΔιατήÏηση και των δÏο
Αντικατάσταση
- Δεν μεταφοÏτώθηκε
+ Îα μην μεταφοÏτωθεί
Î Ïοεπισκόπηση εικόνας
- Αυτή η εικόνε δεν μπόÏεσε να Ï€Ïοβληθεί
- %1$s δεν μποÏεσε να αντιγÏαφθεί στον %2$s τοπικο καταλόγο
- επιλογή όλων
- ΦόÏτωση πεÏισσότεÏων εικόνων
- Μήνυμα Αποτυχίας:
+ Αυτή η εικόνα δεν μποÏεί να Ï€Ïοβληθεί
+ Το %1$s δεν μπόÏεσε να αντιγÏαφεί στον τοπικό φάκελο %2$s
+ ΔιαδÏομή ΜεταφόÏτωσης
+ ΛυποÏμαστε, ο διαμοιÏασμός δεν επιτÏÎπεται στο διακομιστή σας. ΠαÏακαλοÏμε επικοινωνείστε με το
+ διαχειÏιστή σας.
+ ΑδÏνατη η κοινή χÏήση. ΠαÏακαλώ ελÎγξτε αν ο φάκελος υπάÏχει
+ Ένα σφάλμα Ï€ÏοÎκυψε κατά την Ï€Ïοσπάθεια διαμοιÏÎ±ÏƒÎ¼Î¿Ï Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… αÏχείου ή φακÎλου
+ ΑδÏνατη η διακοπή κοινής χÏήσης. ΠαÏακαλώ ελÎγξτε αν ο φάκελος υπάÏχει
+ Ένα σφάλμα Ï€ÏοÎκυψε κατά τη διάÏκεια ακÏÏωσης διαμοιÏÎ±ÏƒÎ¼Î¿Ï Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… αÏχείου ή φακÎλου
+ Αποστολή
+ ΑντιγÏαφή συνδÎσμου
+ ΑντιγÏαφθηκε στο Ï€ÏόχειÏο
+ ΚÏίσιμο σφάλμα: αδÏνατη η εκτÎλεση λειτουÏγειών
+ Ένα σφάλμα Ï€ÏοÎκυψε κατά τη σÏνδεση με το διακομιστή.
+ Ένα σφάλμα Ï€ÏοÎκυψε κατά την αναμονή για το διακομιστή, η λειτουÏγία δεν ήταν επιτυχής
+ Ένα σφάλμα Ï€ÏοÎκυψε κατά την αναμονή για το διακομιστή, η λειτουÏγία δεν ήταν επιτυχής
+ Η λειτουÏγία δεν ήταν δυνατό να ολοκληÏωθεί, ο διακομιστής δεν είναι διαθÎσιμος
+
+ Δεν Îχετε Ï€Ïόσβαση %s
+ για να μετονομάσετε αυτό το αÏχείο
+ για να διαγÏάψετε αυτό το αÏχείο
+ για να μοιÏαστείτε αυτό το αÏχείο
+ για να μη μοιÏαστείτε αυτό το αÏχείο
+ για να δημιουÏγήσετε το αÏχείο
+ για να μεταφοÏτώσετε σε αυτό τον κατάλογο
+ Αυτό το αÏχείο δεν είναι πια διαθÎσιμο στο διακομιστή
+ ΛογαÏιασμοί
+ Î Ïοσθήκη λογαÏιασμοÏ
+ Ασφαλής σÏνδεση ανακατευθÏνεται σε μια μη ασφαλή διαδÏομή.
+ ΑÏχεία καταγÏαφών
+ Αποστολή ιστοÏικοÏ
+ αÏχεία καταγÏαφής της εφαÏμογής ownCloud Android
+ ΦόÏτωση δεδομÎνων....
+ Απαιτείται πιστοποίηση
+ ΕσφαλμÎνο συνθηματικό
+ Μετακίνηση
+ Δεν υπάÏχει τίποτα εδώ. ΜποÏείτε να Ï€ÏοσθÎσετε Îνα φάκελο!
+ ΕπιλÎξτε
+ ΑδÏνατη η μετακίνηση. ΠαÏακαλώ ελÎγξτε αν ο φάκελος υπάÏχει
+ Δεν είναι δυνατό να μετακινηθεί ο φάκελος σε Îναν απογονικό
+ Το αÏχείο υπάÏχει ήδη στο φάκελο Ï€ÏοοÏισμοÏ
+ Ένα σφάλμα Ï€ÏοÎκυψε κατά την Ï€Ïοσπάθεια μετακίνησης Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… αÏχείου ή φακÎλου
+ για μετακίνηση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… αÏχείου
+ Στιγμιαίες ΜεταφοÏτώσεις
+ Ασφάλεια
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 678df10499..320d1e6700 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -7,17 +7,20 @@
Content from other apps
Files
Open with
- Create directory
+ New folder
Settings
Details
+ Send
General
More
Accounts
Manage Accounts
App PIN
Protect your client
- Enable instant uploads
- Instantly upload photos taken by camera
+ Instant picture uploads
+ Instantly upload pictures taken by camera
+ Instant video uploads
+ Instantly upload videos recorded by camera
Enable Logging
This is used to log problems
Logging History
@@ -30,14 +33,14 @@
Try %1$s on your smartphone!
I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s
Check Server
- Server address
+ Server address https://…
Username
Password
New to %1$s?
Files
Connect
Upload
- Choose upload directory:
+ Choose upload folder:
No account found
There are no %1$s accounts on your device. Please setup an account first.
Setup
@@ -46,7 +49,9 @@
No content was received. Nothing to upload.
%1$s is not allowed to access the shared content
Uploading
- There are no files in this folder.\nNew files can be added with the \"Upload\" menu option.
+ Nothing in here. Upload something!
+ Loading...
+ There are no files in this folder.
Tap on a file to display additional information.
Size:
Type:
@@ -55,6 +60,8 @@
Download
Refresh file
File was renamed to %1$s during upload
+ Share link
+ Unshare link
Yes
No
OK
@@ -70,13 +77,14 @@
Delete account
Create account
Upload from …
- Directory name
+ Folder name
Uploading …
%1$d%% Uploading %2$s
Upload succeeded
%1$s was successfully uploaded
Upload failed
Upload of %1$s could not be completed
+ Upload failed, you need to login again
Downloading …
%1$d%% Downloading %2$s
Download succeeded
@@ -84,8 +92,10 @@
Download failed
Download of %1$s could not be completed
Not downloaded yet
+ Download failed, you need to login again
Choose account
Synchronisation failed
+ Synchronisation failed, you need to relogin
Synchronisation of %1$s could not be completed
Invalid password for %1$s
Conflicts found
@@ -93,8 +103,8 @@
Kept-in-sync files failed
Contents of %1$d files could not be synced (%2$d conflicts)
Some local files were forgotten
- %1$d files out of the %2$s directory could not be copied into
- As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronisation. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s directory and retain the link to %4$s.\n\nListed below are the local file(s), and the the remote file(s) in %5$s they were linked to.
+ %1$d files out of the %2$s folder could not be copied into
+ As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronisation. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s folder and retain the link to %4$s.\n\nListed below are the local file(s), and the remote file(s) in %5$s they were linked to.
Folder %1$s does not exist anymore
Move all
All files were moved
@@ -130,6 +140,7 @@
Rewind button
Play or pause button
Fast-forward button
+ Getting authorisation…
Trying to login…
No network connection
Secure connection unavailable.
@@ -158,11 +169,14 @@
Connecting to authentication server…
The server does not support this authentication method
%1$s does not support multiple accounts
+ Your server is not returning a correct user id, please contact an administrator
+
+ Cannot authenticate against this server
Keep file up to date
Rename
Remove
- Do you really want to remove %1$s ?
- Do you really want to remove %1$s and its contents ?
+ Do you really want to remove %1$s?
+ Do you really want to remove %1$s and its contents?
Local only
Local contents only
Remove from server
@@ -174,10 +188,13 @@
Rename could not be completed
Remote file could not be checked
File contents already synchronised
- Directory could not be created
+ Folder could not be created
+ Forbidden characters: / \\ < > : \" | ? *
+ File name cannot be empty
Wait a moment
Unexpected problem; please select the file from a different app
No file was selected
+ Send link to …
Log in with oAuth2
Connecting to oAuth2 server…
The identity of the site could not be verified
@@ -202,6 +219,8 @@
To:
Signature:
Algorithm:
+ The certificate could not be shown.
+ - No information about the error
This is a placeholder
placeholder.txt
PNG Image
@@ -209,6 +228,7 @@
2012/05/18 12:23 PM
12:23:45
Upload pictures via WiFi only
+ Upload videos via WiFi only
/InstantUpload
Update conflict
Remote file %s is not synchronised with local file. Continuing will replace content of file on server.
@@ -217,16 +237,48 @@
Don\'t upload
Image preview
This image cannot be shown
- %1$s could not be copied to %2$s local directory
- Failed InstantUpload\"
- Failed instant uploads
- Summary of all failed instant uploads
- select all
- retry all selected
- delete all selected from uploadqueue
- retry uploading the image:
- Load more Pictures
- do nothing you are not online for instant upload
- Failure Message:
- Please check your server configuration, perhaps your quota is exceeded.
+ %1$s could not be copied to %2$s local folder
+ Upload Path
+ Sorry, sharing is not enabled on your server. Please contact your
+ administrator.
+ Unable to share. Please check whether the file exists
+ An error occurred while trying to share this file or folder
+ Unable to unshare. Please check whether the file exists
+ An error occurred while trying to unshare this file or folder
+ Send
+ Copy link
+ Copied to clipboard
+ Critical error: cannot perform operations
+ An error occurred whilst connecting to the server.
+ An error occurred whilst waiting for the server, the operation couldn\'t be done
+ An error occurred whilst waiting for the server, the operation couldn\'t been done
+ The operation couldn\'t be completed, server is unavailable
+
+ You do not have permission %s
+ to rename this file
+ to delete this file
+ to share this file
+ to unshare this file
+ to create the file
+ to upload to this folder
+ The file is no longer available on the server
+ Accounts
+ Add account
+ Secure connection is redirected to an unsecured route.
+ Logs
+ Send History
+ ownCloud Android app logs
+ Loading data...
+ Authentication required
+ Incorrect password
+ Move
+ Nothing in here. You can add a folder!
+ Choose
+ Unable to move. Please check whether the file exists
+ It is not possible to move a folder into a descendant
+ The file exists already in the destination folder
+ An error occurred whilst trying to move this file or folder
+ to move this file
+ Instant Uploads
+ Security
diff --git a/res/values-en-rNZ/strings.xml b/res/values-en-rNZ/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-en-rNZ/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-eo/strings.xml b/res/values-eo/strings.xml
index debd294847..2b4413ced2 100644
--- a/res/values-eo/strings.xml
+++ b/res/values-eo/strings.xml
@@ -1,26 +1,31 @@
+ Android-aplikaĵo %1$s
+ eldono %1$s
AlÅuti dosieron
Enhavo el aliaj aplikaĵoj
Dosieroj
- Krei dosierujon
+ Malfermi per
+ Nova dosierujo
Agordo
Detaloj
+ Sendi
Äœeneralo
Pli
Kontoj
Administri kontojn
PIN de App-aplikaĵo
Protekti vian klienton
- Kapabligi tujan alÅuton
- Tuje alÅuti fotojn faritajn per fotilo
Helpo
- Servila adreso
+ Rekomendi al amiko
+ Kontroli servilon
+ Servila adreso https://...
Uzantonomo
Pasvorto
Dosieroj
Konekti
AlÅuti
+ Elektu alÅutan dosierujon:
Neniu konto troviÄis
Estas neniu $1%s-konto en via aparato. Bonvolu agordi konton unue.
Agordi
@@ -29,13 +34,15 @@
Neniu enhavo riceviÄis. Nenio alÅutota.
$1%s ne estas permesata aliri la kunhavigitan enhavon
AlÅutante
- Neniu dosiero estas en ĉi tiu dosierujo.\nNovajn dosierojn vi povas aldoni per la menuero “AlÅutiâ€.
+ Nenio estas ĉi tie. AlÅutu ion!
Grando:
Tipo:
Kreita je:
Modifita je:
ElÅuti
La dosiero alinomiÄis al %1$s dum alÅuto
+ Konhavigi ligilon
+ Malkunhavigi ligilon
Jes
Ne
Akcepti
@@ -44,6 +51,7 @@
Nuligi
Konservi kaj forlasi
Eraro
+ Åœargante...
Nekonata eraro
Pri
ÅœanÄi la pasvorton
@@ -57,19 +65,30 @@
%1$s sukcese alÅutiÄis
AlÅuto malsukcesis
AlÅuto de %1s ne eblis plenumiÄi
+ AlÅuto malsukcesis, vi devas reensaluti
ElÅutante...
%1$d%% ElÅutante %2$s
ElÅuto sukcesis
%1$s sukcese elÅutiÄis
ElÅuto malsukcesis
ElÅuto de %1$s ne eblis plenumiÄi
+ AnkoraÅ ne elÅutita
+ ElÅuto malsukcesis, vi devas reensaluti
Elekti konton
Sinkronigo malsukcesis
Sinkronigo de %1$s ne povis plenumiÄi
+ Nevalida pasvorto por %1$s
Konfliktoj troviÄis
%1$d ade sinkronigataj dosieroj ne povis sinkroniÄi
Malsukcesis ada sinkronigo de dosieroj
Enhavoj de %1$d dosieroj ne povis sinkroniÄi (%2$d konfliktas)
+ Iuj lokaj dosieroj forgesiÄis
+ La dosierujo %1$s ne plu ekzistas
+ Movi ĉion
+ Ĉiuj dosieroj moviÄis
+ Iuj dosieroj ne povis moviÄi
+ Loka: %1$s
+ Malloka: %1$s
Bonvolu enigi vian PIN-on de aplikaĵo
Enigu PIN-on de aplikaĵo
Bonvolu reenigi PIN-on de aplikaĵo
@@ -78,6 +97,9 @@
MalÄusta PIN de aplikaĵo
PIN de aplikaĵo foriÄis
PIN de aplikaĵo konserviÄis
+ %1$s (ludanta)
+ %1$s (Åarganta)
+ Ekhavante rajtigon...
Provante ensaluti...
Neniu reta konekto
Sekura konekto ne haveblas.
@@ -93,11 +115,16 @@
Nerekonita eldono de servilo
Ne eblis starigi konekton
Sekura konekto stariÄis
+ MalÄusta uzantonomo aÅ pasvorto
+ Malsukcesa rajtigo
+ Bonvolu enigi la nunan pasvorton
+ Konektante al aÅtentiga servilo...
+ La servilo ne kongruas kun ĉi tiu aÅtentiga metodo
Teni dosieron Äisdatigita
Alinomigi
Forigi
Ĉu vi vere volas forigi %1$s?
- Ĉu vi vere volas forigi %1$s kaj sian enhavon?
+ Ĉu vi vere volas forigi %1$s kaj Äia enhavo?
Nur loka
Nur lokaj enhavoj
Forigi el la servilo
@@ -109,10 +136,14 @@
Alinomigo ne povis plenumiÄi
Malloka dosiero ne povis kontroliÄi
Dosierenhavoj jam sinkroniÄis
- Dosierujo ne povis kreiÄi
+ Malpermesataj signoj: / \\ < > : \" | ? *
+ Dosieronomo ne povas malpleni
Atendu momenton
Neatendita problemo; bonvolu provi alian aplikaĵon por elekti la dosieron
Neniu dosiero elektiÄis
+ Sendi ligilon al...
+ Ensaluti per oAuth2
+ Konektante al oAuth2-servilo...
La idento de la ejo ne povis kontroliÄi
- La servila atestilo ne fidindas
- La servila atestilo eksvalidiÄis
@@ -134,10 +165,26 @@
Subskribo:
Algoritmo:
Ĉi tio estas lokokupilo
+ PNG-bildo
+ 389 KB
+ 12:23:45
AlÅuti bildojn nur per WiFi
AlÅuta konflikto
La malloka dosiero %s estas ne sinkronigita kun loka dosiero. Se la ago daÅrus, enhavo de la dosiero en la servilo anstataÅiÄus.
Konservi ambaÅ
AnstataÅigi
Ne alÅuti
+ AntaÅvido de bildo
+ Ĉi tiu bildo ne povas montriÄi
+ %1$s ne povis kopiiÄi al la loka dosierujo %2$s
+ Sendi
+ Kopii ligilon
+ Kopiita en la tondejon
+ Eraro okazis dum konekto al la servilo.
+
+ Kontoj
+ AÅtentiÄo nepras
+ MalÄusta pasvorto
+ Elekti
+ Sekuro
diff --git a/res/values-es-rAR/strings.xml b/res/values-es-rAR/strings.xml
index f52866524d..780a604341 100644
--- a/res/values-es-rAR/strings.xml
+++ b/res/values-es-rAR/strings.xml
@@ -7,34 +7,39 @@
Contenido de otras aplicaciones
Archivos
Abrir con
- Crear directorio
+ Nueva Carpeta
Configuración
Detalles
+ Mandar
General
Más
Cuentas
Gestionar cuentas
PIN de aplicación
Protejé tu cliente
- Habilitar la subida inmediata
- Subir inmediatamente las fotos sacadas con la cámara
+ Subir fotos instantáneamente.
+ Subir instantáneamente fotos tomadas por la cámara.
+ Subir videos instantáneamente.
+ Subir instantáneamente videos tomados por la cámara.
Habilitar registro
Esto es usado para registrar problemas
Historia del Registro
Esto muestra los registros grabados
Eliminar Historial
Ayuda
+ Recomendar a un amigo
Sugerencias
Imprint
+ ¡Intento %1$s en tu teléfono inteligente!
Verificar Servidor
- Dirección del servidor
+ Dirección del servidor https://...
Nombre de usuario
Contraseña
¿Sos nuevo para %1$s?
Archivos
Conectar
Subir
- Elegà el directorio de subida:
+ Elija la carpeta de subida:
No se encontraron cuentas
No hay cuentas de %1$s en tu dispositivo. Creá una cuenta primero.
Configurar
@@ -43,7 +48,9 @@
No se recibió ningún contenido. No hay nada para subir.
%1$s no está autorizado para acceder al contenido compartido
Subiendo
- No hay archivos en este directorio.\nPodés agregar archivos a través de la opción del menú \"Subir\".
+ No hay nada. ¡Subà contenido!
+ Cargando...
+ No existen archivos en esta carpeta.
Pulsá sobre un archivo para mostrar información adicional.
Tamaño:
Tipo:
@@ -52,6 +59,8 @@
Descargar
Actualizar archivo
El archivo fue renombrado como %1$s durante la subida
+ Compartir vÃnculo
+ Dejar de compartir vÃnculo
SÃ
No
Aceptar
@@ -67,13 +76,14 @@
Eliminar cuenta
Crear cuenta
Subir desde ...
- Nombre del directorio
+ Nombre de la carpeta
Subiendo...
%1$d%% Subiendo %2$s
Subido con éxito
%1$s se ha subido con éxito
Error al subir el archivo
No se pudo completar la subida de %1$s
+ Subida fallida, necesita volver a iniciar sesión.
Descargando ...
%1$d%% descargando %2$s
Descarga completa
@@ -81,8 +91,10 @@
Error al descargar
No fue posible completar la descarga de %1$s
No descargado
+ Descarga fallida, necesita volver a iniciar sesión
Elegà una cuenta
Error en la sincronización
+ Sincronización fallida, debe volver a iniciar sesión
No se pudo completar la sincronización de %1$s
Contraseña no válida para %1$s
Se encontraron conflictos
@@ -90,14 +102,14 @@
Fallo la sincronización de archivos
%1$d archivos no pudieron ser sincronizados (%2$d conflictos)
Algunos archivos locales fueron olvidados
- %1$d archivos del directorio %2$s no pudieron ser copiados en
- Desde la versión 1.3.16, los archivos subidos desde este dispositivo se copian a un directorio local %1$s para prevenir la pérdida de datos cuando un único archivo es sincronizado con múltiples cuentas. \n\nDebido a este cambio, todos los archivos subidos en versiones previas de esta aplicación fueron copiados al directorio %2$s. No obstante, debido a un error, esta operación no pudo ser completada durante la sincronización de la cuenta. Podés dejar los archivos asà y borrar el enlace a %3$s, o podés mover el/los archivos al directorio %1$s y conservar el enlace a %4$s. \n\nAbajo, encontrás la lista con los enlaces a los archivos locales y remotos en %5$s a los que están enlazados.
+ %1$d archivos en la carpeta %2$s no pudieron ser copiados
+ El directorio %1$s ya no existe
Mover todos
Todos los archivos fueron movidos
Algunos archivos no pudieron ser movidos
Local: %1$s
Remote: %1$s
- No hay suficiente espacio para copiar los archivos seleccionados al directorio %1$s. Querés moverlos ah�
+ No hay espacio suficiente para copiar los archivos seleccionados dentro de la carpeta %1$s. ¿Te gustarÃa en su lugar moverlos?
Por favor, escribà el PIN de la aplicación
Ingresá el PIN de la aplicación
Se te pedirá el PIN cada vez que esta app sea iniciada.
@@ -117,6 +129,7 @@
Codec no soportado
El archivo de medios no pudo ser leÃdo
Archivo no está correctamente codificado
+ Tiempo expirado mientras se intentaba reproducir
Archivo de medios no puede ser transmitido
El archivo de medios no se puede reproducir con el reproductor de medios por defecto
Error de seguridad al intentar reproducir %1$s
@@ -125,18 +138,22 @@
Botón rebobinado
Botón de reproducción o pausa
Botón avance rápido
+ Obteniendo autorización...
Intentado iniciar sesión...
Sin conexión de red
Conexión segura no disponible.
Conexión establecida
Probando conexión...
Configuración de servidor en formato incorrecto
+ Una cuenta para el mismo usuario y servidor ya existe en el dispositivo
+ El usuario ingresado no concuerda con el usuario de esta cuenta
¡Ocurrió un error desconocido!
No fue posible encontrar la dirección
Instancia de servidor no encontrada
El servidor tardó demasiado en responder
URL no válida
Error al inicializar el SSL
+ No se ha podido verifica la identidad SSL del servidor
No es posible reconocer la versión del servidor
No fue posible establecer la conexión
Conexión segura establecida
@@ -144,12 +161,19 @@
Autorización no satisfactoria
Acceso denegado por el servidor de autorización
Estado inesperado; por favor, introducà la URL del servidor de nuevo
+ Tu autorización ha expirado. Por favor, obtenga una nueva autorización
Por favor, ingresá tu contraseña actual
+ Su sesión ha expirado. Por favor, conéctese de nuevo
+ Conectando al servidor de autenticación...
+ El servidor no soporta este método de autenticación
+ %1$s no soporta múltiples cuentas
+ Tú servidor no esta regresando una identificación de usuario correcta, por favor contacta a un administrador
+ No se puede autenticar contra este servidor
Mantener el archivo actualizado
Renombrar
Borrar
- ¿Estás seguro que querés borrar %1$s?
- ¿Realmente quieres borrar %1$s y todos sus contenidos ?
+ ¿Realmente quieres eliminar %1$s?
+ ¿Realmente deseas eliminar %1$s y todo su contenido?
Sólo local
Solo archivos locales
Borrar del servidor
@@ -161,10 +185,14 @@
No se pudo cambiar el nombre
No pudo comprobarse el archivo remoto
Ya está sincronizado
- No fue posible crear el directorio
+ La carpeta puede no haber sido creada
+ Caracteres prohibidos: / \\ < > : \" | ? *
+ El nombre de archivo no puede estar vacÃo
Esperá un momento
Problema inesperado; por favor, intentá con otra aplicación para abrir el archivo
No se seleccionó ningún archivo
+ Enviar enlace a...
+ Iniciando sesión con oAuth2
Conectando al servidor oAuth2...
La identidad del sitio no pudo ser verificada
- El certificado del servidor no es confiable
@@ -188,6 +216,8 @@
Para:
Firma:
Algoritmo:
+ El certificado no puede ser mostrado
+ - No existe información sobre el error
Este es un texto temporario
marcadordeposición.txt
Imagen PNG
@@ -195,6 +225,7 @@
2012/05/18 12:23 PM
12:23:45
Subir imágenes solamente a través de WiFi
+ Cargar videos mediante WiFi solamente
/SubidasInstantáneas
Conflicto en la actualización
El archivo remoto %s no está sincronizado con el archivo local. Si seguÃs adelante, vas a reemplazar el contenido del archivo en el servidor.
@@ -202,17 +233,13 @@
Sobrescribir
No subir
Previsualización de imagen
- No se puede mostrar la imagen
- %1$s no pudo ser copiado al directorio local %2$s
- Error en Carga instantánea
- Error en Cargas instantánea
- Resumen de todas las cargas instantáneas con error
- Seleccionar todos
- Reintentar con todos los seleccionados
- Eliminar todo de la cola de subida
- Reintentar subida de imagen:
- Cargar mas imágenes
- No hacer nada, no estás conectado para subida instantánea
- Mensaje de error:
- Por favor, revisá la configuración de servidor, posiblemente tu cuota se haya excedido.
+ Esta imagen no puede ser mostrada
+ Mandar
+ Copiado al portapapeles
+
+ Cuentas
+ Autentificación requerida
+ Clave incorrecta
+ Elegir
+ Seguridad
diff --git a/res/values-es-rBO/strings.xml b/res/values-es-rBO/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-es-rBO/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-es-rCL/strings.xml b/res/values-es-rCL/strings.xml
new file mode 100644
index 0000000000..c9510725ea
--- /dev/null
+++ b/res/values-es-rCL/strings.xml
@@ -0,0 +1,170 @@
+
+
+ Refrescar cuenta
+ Subir
+ contenido desde otras aplicaciones
+ Archivos
+ Nuevo directorio
+ Configuración
+ detalles
+ General
+ Cuentas
+ Administrar Cuentas
+ PIN de la aplicación
+ Proteger su cliente
+ Subida instantánea de imagenes
+ Subida instantánea de imágenes tomadas con la cámara
+ Ayuda
+ Dirección del servidor https://...
+ Usuario
+ Clave
+ ¿Nuevo en %1$s?
+ Archivos
+ Conectar
+ Subir
+ Elija el directorio donde subir los archivos:
+ No se encuentra la cuenta
+ No existe la cuenta %1$s en su dispositivo. Por favor configure una cuenta primero.
+ Configuración
+ Salir
+ ningun contenido para subir
+ No se ha recibido ningún contenido. No hay nada para subir.
+ %1$s no esta autorizado para acceder al contenido compartido
+ Subiendo
+ Seleccione un archivo para desplegar información adicional.
+ Tamaño:
+ Tipo:
+ Creado:
+ Modificado:
+ Descargar
+ refrescar archivo
+ El archivo fue renombrado a %1$s durante la subida
+ Si
+ No
+ OK
+ cancelar bajada
+ cancelar subida
+ Cancelar
+ Guardar&Salir
+ Error
+ Cargando ...
+ Error desconocido
+ Acerca de
+ Eliminar cuenta
+ Crear cuenta
+ Subir desde...
+ Nombre del directorio
+ Subiendo
+ %1$d%% Subiendo %2$s
+ Subida correcta
+ %1$s fue subido correctamente
+ Subida fallida
+ La subida de %1$s no pudo ser completada
+ Descargando...
+ %1$d%% Descargando %2$s
+ Descarga completada
+ %1$s fue descargado correctamente
+ Descarga fallida
+ La descarga de %1$s no pudo ser completada
+ Aun no se ha descargado
+ Elija una cuenta
+ sincronización fallida
+ La sincronización de %1$s no pudo ser completada
+ conflictos encontrados
+ Algunos archivos fueron olvidados
+ %1$d archivos fuera de la carpeta %2$s no pudieron ser copiados dentro
+ mover todo
+ todos los archivos fueron transferidos
+ algunos archivos no pueden ser transferidos
+ Local: %1$s
+ Remoto: %1$s
+ Por favor, ingreses su PIN de aplicación
+ Ingrese su PIN de aplicación
+ El PIN será solicitado cada vez que la aplicación se inicie
+ Por favor, reingrese su PIN de aplicación
+ Remover el PIN de su aplicación
+ Los PINs de su aplicación no coinciden
+ PIN de aplicación incorrecto
+ PIN de aplicación removido
+ PIN de aplicación almacenada
+ Reproductor de música %1$s
+ (sonando) %1$s
+ (cargando) %1$s
+ La reproducción de %1$s ha terminado
+ ningun archivo multimedia encontrado
+ ninguna cuenta provista
+ El archivo no es de una cuenta válida
+ Codificador de medios no soportado
+ El archivo multi media no se pudo leer
+ El archivo multimedia no está correctamente codificado
+ Se excedió el tiempo al intentar reproducir
+ Intentando entrar...
+ Sin conexión de red
+ Conexión segura no disponible.
+ Conexión establecida
+ Probando conexión...
+ La configuración del servidor está mal formada
+ Ocurrió un error desconocido
+ No se puede encontrar el host
+ Instancia del servidor no encontrada
+ El servidor se demoro mucho en contestar
+ URL mal formada
+ Inicialización SSL fallida
+ No se pudo verificar la identidad SSL del servidor
+ Versión del servidor no reconocida
+ No se pudo establecer la conexión
+ Conexión segura establecida
+ usuario o clave incorrecta
+ Mantener el archivo actualizado
+ Renombrar
+ Remover
+ ¿Realmente desea eliminar %1$s?
+ ¿Realmente desea eliminar el archivo %1$s y su contenido?
+ Solo local
+ solo contenidos locales
+ Eliminar desde el servidor
+ Remoto y local
+ Removido correctamente
+ Fallo al remover
+ ingresar un nuevo nombre
+ La copia local no se pudo renombrar, pruebe un nombre diferente
+ Renombrar no pudo ser completado
+ El archivo remoto no se pudo chequear
+ contenido de los archivos ya sincronizados
+ El directorio no pudo ser creado
+ espera un momento
+ Problema inesperado ; por favor seleccione el archivo desde una aplicación diferente
+ ningun archivo electo
+ La identidad del sitio no pudo ser verificada
+ -El certificado del servidor no es confiable
+ -El certificado del servidor está expirado
+ -Las fechas validas para el certificado del servidor son futuras.
+ - La URL no corresponde al nombre del servidor en el certificado
+ ¿Desea confiar en el certificado de todas manera?
+ El certificado no se pudo guardar
+ detalles
+ esconder
+ emitido para
+ emitido por
+ nombre comun
+ organizacion
+ unidad organizacional
+ pais
+ estado
+ locacion
+ Validez:
+ desde
+ para
+ Firma:
+ algoritmo
+ Solo subir fotos vÃa WiFi
+ Conflicto al actualizar
+ El archivo remoto %s no está sincronizado con la copia local. Si continua, se reemplazará el archivo en el servidor.
+ Mantener ambos
+ Sobre-escribir
+ No subir
+ %1$s no pudo ser copiado a la carpeta local %2$s
+
+ Cuentas
+ Choose
+
diff --git a/res/values-es-rCO/strings.xml b/res/values-es-rCO/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-es-rCO/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-es-rCR/strings.xml b/res/values-es-rCR/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-es-rCR/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-es-rEC/strings.xml b/res/values-es-rEC/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-es-rEC/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-es-rMX/strings.xml b/res/values-es-rMX/strings.xml
index c757504ac2..ef91bc63fa 100644
--- a/res/values-es-rMX/strings.xml
+++ b/res/values-es-rMX/strings.xml
@@ -1,2 +1,219 @@
-
+
+ App Android %1$s
+ versión %1$s
+ Actualizar cuenta
+ Subir archivo
+ Contenido de otras aplicaciones
+ Archivos
+ Abrir con
+ Nueva carpeta
+ Ajustes
+ Detalles
+ Enviar
+ General
+ Más
+ Cuentas
+ Gestionar cuentas
+ PIN de aplicación
+ Proteja su cliente
+ Habilitar registro
+ Esto es usado para registrar problemas
+ Historia del Registro
+ Esto muestra los registros grabados
+ Eliminar Historial
+ Ayuda
+ Recomendar a un amigo
+ Mensajes de retroalimentación
+ Imprint
+ Prueba %1$s en tu smarthphone!
+ Compruebe el servidor.
+ Dirección del servidor https://…
+ Nombre de usuario
+ Contraseña
+ New to %1$s?
+ Archivos
+ Conectar
+ Subir
+ No se encontraron cuentas
+ No hay cuentas de %1$s en tu dispositivo. Por favor configura una cuenta primero.
+ Configuración
+ Salir
+ No hay contenido para subir
+ Ningún contenido ha sido recibido. No hay nada que subir.
+ %1$s no está autorizado para acceder al contenido compartido
+ Enviando
+ No hay nada aquÃ. ¡Suba algo!
+ Pulsa sobre un archivo para mostrar información adicional.
+ Tamaño:
+ Tipo:
+ Creado:
+ Modificado:
+ Descargar
+ Actualizar archivo
+ El archivo fue renombrado como %1$s durante la subida
+ Enlace compartido
+ SÃ
+ No
+ Aceptar
+ Cancelar descarga
+ Cancelar subida
+ Cancelar
+ Guardar & Salir
+ Error
+ Cargando ...
+ Error desconocido
+ Acerca de
+ Cambiar contraseña
+ Eliminar cuenta
+ Crear cuenta
+ Subir
+ Nombre de la carpeta
+ Subiendo...
+ %1$d%% Subiendo %2$s
+ Subido con éxito
+ %1$s se ha subido con éxito
+ Error en la subida
+ La subida de %1$s no se pudo completar
+ Descargando ...
+ %1$s Descargada de %2$s
+ Descarga completa
+ %1$s se ha descargado con éxito
+ Falló la descarga
+ La descarga de %1$s no se pudo completar
+ No descargado
+ Elige una cuenta
+ Falló la sincronización
+ La sincronización de %1$s s no se pudo completar
+ Contraseña no válida para %1$s
+ Se encontraron conflictos
+ Falló la sincronización de contenidos de %1$d archivos
+ Fallos en la sincronización de contenidos
+ Los contenidos de %1$d archivos no fueron sincronizados (%2$d conflictos)
+ Algunos archivos locales se han perdido
+ La carpeta local %1$s no existe.
+ Mover todo
+ Todos los archivos fueron movidos
+ Algunos archivos no han podido ser movidos
+ Local: %1$s
+ Remoto: %1$s
+ Por favor, inserta tu PIN de aplicación
+ Introduzca un PIN para la aplicación
+ Se solicitará el PIN cada vez que se inicie la aplicación
+ Repita el PIN para la aplicación, por favor
+ Borre su PIN de aplicación
+ Los PIN introducidos no son iguales
+ PIN de aplicación incorrecto
+ PIN de aplicación borrado
+ PIN de aplicación guardado
+ Reproductor de música %1$s
+ %1$s (reproduciendo)
+ %1$s (cargando)
+ %1$s reproducción finalizada
+ No se encuentra archivo de medio
+ No se ha proporcionado cuenta
+ El archivo no esta en una cuenta valida
+ Codec No Soportado
+ El archivo de medios no pudo ser leÃdo
+ Archivo no codificado correctamente
+ Tiempo de espera agotado en el intento de reproducción
+ Archivo de medio no puede ser transmitido
+ El archivo de medios no se puede reproducir con el reproductor de medios por defecto
+ Error de seguridad al intentar reproducir %1$s
+ Error de entrada al intentar reproducir %1$s
+ Error inesperado intentando reproducir %1$s
+ Botón Rebobinado
+ Botón de reproducción o pausa
+ Botón avance rápido
+ Intentado iniciar sesión...
+ Sin conexión de red
+ Conexión segura no disponible.
+ Conexión establecida
+ Probando conexión...
+ Configuración de servidor en formato incorrecto
+ Una cuenta para el mismo usuario y servidor ya existen en el dispositivo
+ El usuario introducido no concuerda con el usuario de esta cuenta
+ Ocurrió un error desconocido
+ No se pudo encontrar la dirección
+ Instancia de servidor no encontrada
+ El servidor ha tardado demasiado en responder
+ URL no válida
+ Falló la inicialización SSL
+ No fue posible verificar la identidad del servidor SLL
+ No se reconoce la versión del servidor
+ No se ha podido establecer la conexión
+ Conexión segura establecida
+ Nombre de usuario o contraseña incorrecta
+ Autorización no satisfactoria
+ Acceso denegado por servidor de autorización
+ Estado inesperado; por favor, introduzca la URL del servidor de nuevo
+ Su autorización ha expirado. Por favor, autorice de nuevo
+ Por favor, introduzca la contraseña actual.
+ Su sesión ha expirado. Favor de conectarse de nuevo
+ Conectando al servidor de autenticación...
+ El servidor no soporta este método de autenticación
+ %1$s no soporta cuentas múltiples
+ Mantener el archivo actualizado
+ Renombrar
+ Borrar
+ Sólo local
+ Sólo archivos locales
+ Eliminar del servidor
+ Tanto remoto como local
+ Borrado correctamente
+ El borrado no pudo ser completado
+ Introduzca un nombre nuevo
+ No se pudo cambiar el nombre de la copia local, trata con un nombre differente
+ No se pudo cambiar el nombre
+ No pudo comprobarse el archivo remoto
+ Ya está sincronizado
+ Carácteres ilegales: / \\ < > : \" | ? *
+ Espere un momento
+ Problema inesperado; por favor, prueba otra app para seleccionar el archivo
+ No fué seleccionado ningún archivo
+ Ingresar con oAuth2
+ Conectando al servidor oAuth2...
+ La identidad del sitio no puede ser verificada
+ - El certificado del servidor no es de confianza
+ - El certificado del servidor expiró
+ - El certificado del servidor es demasiado reciente
+ - La URL no coincide con el nombre de dominio del certificado
+ ¿ConfÃas de todas formas en este certificado?
+ El certificado no pudo ser guardado
+ Detalles
+ Ocultar
+ Emitido para:
+ Emitido por:
+ Nombre común:
+ Organización:
+ Unidad organizativa
+ Pais:
+ Estado:
+ Ubicación:
+ Validez:
+ De:
+ A:
+ Firma:
+ Algoritmo:
+ Esto es un marcador de posición
+ marcadordeposición.txt
+ Imagen PNG
+ 389 KB
+ 2012/05/18 12:23 PM
+ 12:23:45
+ Subir imágenes sólo via WiFi
+ /SubidasInstantáneas
+ Conflicto en la actualización
+ El archivo remoto %s no está sincronizado con el archivo local. Si continúa, se reemplazará el contenido del archivo en el servidor.
+ Mantener ambas
+ Sobrescribir
+ No subir
+ Previsualización de imagen
+ Enviar
+ Copiado al portapapeles
+
+ Cuentas
+ Contraseña incorrecta
+ Seleccionar
+ Seguridad
+
diff --git a/res/values-es-rPE/strings.xml b/res/values-es-rPE/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-es-rPE/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-es-rPY/strings.xml b/res/values-es-rPY/strings.xml
new file mode 100644
index 0000000000..56fe666500
--- /dev/null
+++ b/res/values-es-rPY/strings.xml
@@ -0,0 +1,6 @@
+
+
+ Archivos
+ Archivos
+
+
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-es-rUS/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-es-rUY/strings.xml b/res/values-es-rUY/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-es-rUY/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 4878480fa0..7f661730df 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -1,23 +1,26 @@
- App Android %1$s
+ %1$s para Android
versión %1$s
Actualizar cuenta
- Subir archivo
+ Subir
Contenido de otras aplicaciones
Archivos
Abrir con
- Crear directorio
- Ajustes
+ Nueva Carpeta
+ Configuración
Detalles
+ Enviar
General
Más
Cuentas
Gestionar cuentas
PIN de aplicación
Proteja su cliente
- Habilita la subida instantánea
- Subir instantáneamente las fotos tomadas por la cámara
+ Subida instantánea de imágenes
+ Sube instantáneamente las fotos tomadas con la cámara
+ Subidas instantáneas de video
+ Sube instantáneamente los vÃdeos grabados con la cámara
Habilitar registro
Esto es usado para registrar problemas
Historia del Registro
@@ -26,27 +29,29 @@
Ayuda
Recomendar a un amigo
Mensajes de retroalimentación
- Imprint
+ pie de imprenta
Prueba %1$s en tu smarthphone!
- Quiero invitarte a usar %1$s en tu smarthphone!âŽ\nDescargalo aquÃ: %2$s
+ ¡Quiero invitarle a usar %1$s en su smartphone!\nDescárguelo aquÃ: %2$s
Compruebe el servidor.
- Dirección del servidor
+ Dirección del servidor https://…
Nombre de usuario
Contraseña
- New to %1$s?
+ Nuevo para %1$s?
Archivos
Conectar
Subir
- Escoja el directorio de carga:
- No se encontraron cuentas
+ Escoger carpeta de carga:
+ No se encontró la cuenta
No hay cuentas de %1$s en tu dispositivo. Por favor configura una cuenta primero.
Configuración
Salir
No hay contenido para subir
Ningún contenido ha sido recibido. No hay nada que subir.
%1$s no está autorizado para acceder al contenido compartido
- Enviando
- No hay archivos en esta carpeta.\nPuedes añadir nuevos archivos con la opción \"Subir\" del menú.
+ Subiendo...
+ No hay nada aquÃ. ¡Suba algo!
+ Cargando...
+ No hay archivos en esta carpeta.
Pulsa sobre un archivo para mostrar información adicional.
Tamaño:
Tipo:
@@ -55,6 +60,8 @@
Descargar
Actualizar archivo
El fichero fue renombrado como %1$s durante la subida
+ Compartir con enlace
+ Dejar de compartir
SÃ
No
Aceptar
@@ -69,39 +76,42 @@
Cambiar contraseña
Eliminar cuenta
Crear cuenta
- Subir
- Nombre de directorio
+ Subir desde...
+ Nombre de la carpeta
Subiendo...
%1$d%% Subiendo %2$s
Subido con éxito
%1$s se ha subido con éxito
Error en la subida
La subida de %1$s no se pudo completar
+ La carga falló, necesita volver a iniciar sesión
Descargando ...
- %1$s Descargada de %2$s
+ %1$d%% Descargado de %2$s
Descarga completa
%1$s se ha descargado con éxito
Falló la descarga
La descarga de %1$s no se pudo completar
No descargado
+ Descarga fallida, necesita reinicar la sesión
Elige una cuenta
Falló la sincronización
+ La sincronización falló, debe reiniciar la sesión
La sincronización de %1$s s no se pudo completar
Contraseña no válida para %1$s
Se encontraron conflictos
Falló la sincronización de contenidos de %1$d ficheros
Fallos en la sincronización de contenidos
- Los contenidos de %1$d ficheros no fueron sincronizados (%2$d conflictos)
+ Los contenidos de %1$d archivos no pudieron sincronizarse (%2$d conflictos)
Algunos archivos locales se han perdido
- %1$d archivos de %2$s no han podido ser copiados
- Como versión 1.3.16, los archivos subidos desde este dispositivo son copiados a un archivo %1$s local para prevenir perdida de datos cuando un simple archivo es sincronizado con multiples cuentas.\n\nDebido a este cambio, todos los archivos subidos en versiones previas de esta aplicación han sido copiados a la carpeta %2$s. No obtante, un error previno el completado de esta operación durante la sincronización de cuenta. DeberÃa dejar el o los archivos asà y eliminar el enlace a %3$s o mover el o los archivos al %1$s directorio y conservar el enlace a %4$s.\n\nListado abajo tiene los enlaces a los archivos locales y archivos remotos en %5$s
+ %1$d archivos en la carpeta %2$s no pudieron ser copiados a
+ A partir de la versión 1.3.16, los ficheros subidos desde este dispositivo se copian en la carpeta local %1$s para evitar la pérdida de datos cuando se sincroniza un único archivo con varias cuentas.\n\nDebido a este cambio, todos los ficheros subidos con versiones anteriores de esta aplicación fueron copiados a la carpeta %2$s. Sin embargo, un error impidió que se completara esta operación durante la sincronización de la cuenta. Puede dejar los archivos tal y como están y eliminar el enlace a %3$s o mover los archivos a la carpeta %1$s y mantener el enlace a %4$s.\n\nDebajo se muestran los archivos locales y los archivos remotos en %5$s a los que fueron enlazados.
La carpeta local %1$s no existe.
Mover todo
Todos los archivos fueron movidos
- Algunos archivos no han podido ser movidos
+ No se han podido mover algunos archivos
Local: %1$s
Remoto: %1$s
- No hay suficiente espacio para copiar los archivos seleccionados en la carpeta %1$s. ¿Quiere moverlos en lugar de copiarlos?
+ No hay suficiente espacio para copiar los archivos seleccionados a la carpeta %1$s. ¿Desea moverlos en vez de copiarlos?
Por favor, inserta tu PIN de aplicación
Introduzca un PIN para la aplicación
Se solicitará el PIN cada vez que se inicie la aplicación
@@ -115,7 +125,7 @@
%1$s (reproduciendo)
%1$s (cargando)
%1$s reproducción finalizada
- No se encuentra archivo de medio
+ No se encontró el archivo multimedia
No se ha proporcionado cuenta
El archivo no esta en una cuenta valida
Codec No Soportado
@@ -130,21 +140,22 @@
Botón Rebobinado
Botón de reproducción o pausa
Botón avance rápido
+ Consiguiendo autorización...
Intentado iniciar sesión...
Sin conexión de red
Conexión segura no disponible.
Conexión establecida
Probando conexión...
Configuración de servidor en formato incorrecto
- Una cuenta para el mismo usuario y servidor ya existen en el dispositivo
+ Ya existe una cuenta en este dispositivo con los mismos datos de Usuario y Servidor
El usuario introducido no concuerda con el usuario de esta cuenta
Ocurrió un error desconocido
- No se pudo encontrar la dirección
+ Error: no se pudo encontrar el host
Instancia de servidor no encontrada
El servidor ha tardado demasiado en responder
URL no válida
Falló la inicialización SSL
- No fue posible verificar la identidad del servidor SLL
+ No fue posible verificar la identidad del servidor SSL
No se reconoce la versión del servidor
No se ha podido establecer la conexión
Conexión segura establecida
@@ -158,11 +169,14 @@
Conectando al servidor de autenticación...
El servidor no soporta este método de autenticación
%1$s no soporta cuentas múltiples
+ Su servidor no está retornando una identificación de usuario correcta; contacte a un administrador
+
+ No puede autenticarse en este servidor.
Mantener el archivo actualizado
Renombrar
Borrar
- ¿Está seguro que desea borrar %1$s ?
- ¿Desea elimiar %1$s y sus descendientes?
+ ¿Realmente desea eliminar %1$s?
+ ¿Realmente desea eliminar %1$s y todo su contenido?
Sólo local
Sólo ficheros locales
Eliminar del servidor
@@ -172,18 +186,21 @@
Introduzca un nombre nuevo
No se pudo cambiar el nombre de la copia local, trata con un nombre differente
No se pudo cambiar el nombre
- No pudo comprobarse el fichero remoto
+ No se ha podido comprobar el fichero remoto
Ya está sincronizado
- El directorio no pudo ser creado
+ No se pudo crear la carpeta
+ Carácteres ilegales: / \\ < > : \" | ? *
+ El nombre de archivo no puede estar vacÃo
Espere un momento
Problema inesperado; por favor, prueba otra app para seleccionar el archivo
- No fué seleccionado ningún archivo
+ No hay ficheros seleccionados.
+ Enviar enlace a...
Ingresar con oAuth2
Conectando al servidor oAuth2...
La identidad del sitio no puede ser verificada
- El certificado del servidor no es de confianza
- El certificado del servidor expiró
- - El certificado del servidor es demasiado reciente
+ - El certificado del servidor es de una fecha que aún no llega
- La URL no coincide con el nombre de dominio del certificado
¿ConfÃas de todas formas en este certificado?
El certificado no pudo ser guardado
@@ -194,39 +211,74 @@
Nombre común:
Organización:
Unidad organizativa
- Pais:
+ PaÃs:
Estado:
Ubicación:
Validez:
- De:
+ Desde
A:
Firma:
Algoritmo:
+ No se ha podido mostrar el certificado
+ - No hay información acerca del error
Esto es un marcador de posición
marcadordeposición.txt
Imagen PNG
389 KB
2012/05/18 12:23 PM
12:23:45
- Subir imágenes sólo via WiFi
+ Subir imágenes sólo cuando hay WiFi
+ Subir vÃdeos sólo por WiFi
/SubidasInstantáneas
Conflicto en la actualización
El archivo remoto %s no está sincronizado con el archivo local. Si continúa, se reemplazará el contenido del archivo en el servidor.
- Mantener ambas
+ Mantener ambos
Sobrescribir
No subir
Previsualización de imagen
No se puede mostrar la imagen
- %1$s no puede ser copiado al %2$s directorio local
- Carga instantánea fallida
- Cargas instantáneas fallidas
- Resumen de todas las cargas instantáneas fallidas
- Seleccionar todos
- Reintentar todos los seleccionados
- Eliminar todo de la cola de subida
- Reintentar subida de imagen:
- Cargar mas imágenes
- No hacer nada no está conectado para subida instantánea
- Mensaje de error:
- Por favor revise su configuración de servidor, posiblemente su cuota se haya excedido.
+ %1$s se pudo copiar a la carpeta local %2$s
+ Ruta de subida
+ La función Compartir no está activada en su servidor. Contacte a su
+ administrador.
+ No se puede compartir. Revise si el archivo existe
+ Ocurrió un error al tratar de compartir este archivo o carpeta
+ No se puede dejar de compartir. Revise si el archivo existe
+ Ocurrió un error al tratar de ya no compartir este archivo o carpeta
+ Enviar
+ Copiar enlace
+ Copiado al portapapeles
+ Error crÃtico: no es posible realizar operaciones
+ Ocurrió un error al conectarse con el servidor.
+ Ocurrió un error al esperar la respuesta del servidor, la operación no se pudo realizar
+ Ocurrió un error al esperar la respuesta del servidor, la operación no se pudo realizar
+ La operación no se pudo completar; el servidor no está disponible
+
+ No tiene permiso %s
+ para renombrar este archivo
+ para eliminar este archivo
+ para compartir este archivo
+ para dejar de compartir este archivo
+ para crear el archivo
+ para subir archivos a esta carpeta
+ Este archivo ya no se encuentra en el servidor
+ Cuentas
+ Agregar cuenta
+ La conexión segura está siendo desviada por una ruta insegura.
+ Logs
+ Enviar historial
+ Logs de las apps ownCloud Android
+ Cargando datos...
+ Se necesita autenticación
+ Contraseña incorrecta
+ Mover
+ Aquà no hay nada. ¡Puede agregar una carpeta!
+ Seleccionar
+ No se puede mover. Revise si el archivo existe
+ No se puede mover una carpeta dentro de una de SUS subcarpetas.
+ El archivo ya existe en la carpeta de destino
+ Hubo un error al tratar de mover este archivo o carpeta
+ para mover este archivo
+ Subidas instantáneas
+ Seguridad
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 4c55fb4064..daba47f4a4 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -7,17 +7,20 @@
Sisu teistest rakendustest
Failid
Ava rakendusega
- Loo kaust
+ Uus kaust
Seaded
Ãœksikasjad
+ Saada
Ãœldine
Rohkem
Kontod
Halda kontosid
Rakenduse PIN
Kaitse oma klienti
- Luba kohene üleslaadimine
- Lae kaamera poolt tehtud fotod automaatselt üles
+ Piltide kohene üleslaadimine
+ Laadi koheselt üles kaameraga tehtud pildid
+ Videote kohene üleslaadimine
+ Laadi koheselt üles kaameraga tehtud videod
Luba logimine
Kasutatakse probleemide logimiseks
Logi ajalugu
@@ -28,9 +31,9 @@
Tagasiside
Impressum
Proovi oma nutitelefonil rakendust %1$s!
- Soovin sind kutsuda kasutama oma nutitelefonil rakendust %1$s!\nLae alla siit: %2$s
+ Kutsun sind kasutama oma nutitelefonis rakendust %1$s!\nLaadi see alla siit: %2$s
Kontrolli serverit
- Serveri aadress
+ Serveri aadress https://...
Kasutajanimi
Parool
Uus %1$s kasutaja?
@@ -46,7 +49,9 @@
Sisu ei saadud. Pole midagi üles laadida.
%1$sile pole lubatud ligipääs jagatud sisule
Ãœleslaadimine
- Selles kaustas pole ühtegi faili.\nUusi faile saab lisada kasutades menüü valikut \"Lae üles\".
+ Siin pole midagi. Lae midagi üles!
+ Laen ...
+ Kaustas pole faile.
Lisainfo vaatamiseks vajuta failile.
Suurus:
Tüüp:
@@ -55,6 +60,8 @@
Lae alla
Värskenda faili
Fail nimetati üleslaadimise käigus ümber %1$
+ Jaga linki
+ Tühista lingi jagamine
Jah
Ei
OK
@@ -77,6 +84,7 @@
%1$s laeti üles
Üleslaadimine ebaõnnestus
%1$s üleslaadimise lõpetamine ebaõnnestus
+ Üleslaadimine ebaõnnestus, sa pead uuesti sisse logima
Allalaadimine ...
%1$d%% allalaadimine %2$s
Allalaadimine oli edukas
@@ -84,8 +92,10 @@
Allalaadimine ebaõnnestus
%1$s allalaadimist ei õnnestunud lõpetada
Allalaadimata
+ Allaladimine ebaõnnestus, sa pead uuesti sisse logima
Vali konto
Sünkroniseerimine ebaõnnestus
+ Sünkroniseering katkes, pead uuesti sisse logima
%1$s sünkroniseerimise lõpetamine ebaõnnestus
Vigane parool %1$s jaoks
Leite konflikte
@@ -93,15 +103,19 @@
Sünkroniseeritavad failid ebaõnnestusid
Faili %1$d sisu ei suudeta sünkroniseerida (konflikt %2$d)
Osad kohalikud faili ununesid
- %1$d faili %2$s kataloogist ei suudeta kopeerida
- Alates versioonist 1.3.16 failid, mis on üles laetud kopeeritakse kohalikku kataloogi %1$s vältimaks andmete kadu, kui ühte faili sünkroniseeritakse mitmelt kontolt.\n\nSelle muudatusega seoses kõik failid, mis on üles laetud rakenduse vanemate versioonidega, kopeeriti kataloogi %2$s. Selle tegevuse peatas viga, mis tekkis konto sünkroniseerimise käigus. Sa saad jätta failid nagu nad on ning eemaldata viide %3$s või tõsta failid %1$s kataloogi ja säilitada viide %4$s.\n\nAllpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s millele nad viitavad.
+ %1$d faili %2$s kataloogis ei saa kopeerida
+ Alates versioonist 1.3.16 failid, mis on üles laaditud kopeeritakse kohalikku kataloogi %1$s vältimaks andmete kadu vältimaks andmete kadu juhul, kui ühte faili sünkroniseeritakse mitmelt kontolt.
+
+Selle muudatusega seoses kõik failid, mis on üles laetud rakenduse vanemate versioonidega, kopeeriti kataloogi %2$s. Selle tegevuse peatas viga, mis tekkis konto sünkroniseerimise käigus. Sa saad jätta faili(d) nagu nad on ning eemaldata viite %3$s või tõsta faili(d) %1$s kataloogi ja säilitada viite %4$s.
+
+Allpool on loend kohalikest failidest ning serveris asuvatest failidest %5$s, millele nad viitavad.
Kausta %1$s pole enam olemas
Tõsta kõik ümber
Kõik failid tõsteti ümber
Mõningaid faile ei saa ümber tõsta
Kohalik: %1$s
Serveris: %1$s
- Pole piisavalt ruumi kopeerimaks valitud faile kataloogi %1$s. Soovid kopeerimise asemel neid ümber tõsta?
+ Pole piisavalt ruumi kopeerimaks valitud faile kataloogi %1$s. Kas soovid kopeerimise asemel neid ümber tõsta?
Palun sisesta oma rakenduse PIN
Sisesta oma rakenduse PIN
PIN-i nõutakse iga kord, kui rakendus käivitatakse
@@ -130,6 +144,7 @@
Tagasikerimise nupp
Mängimise või pausi nupp
Kiire kerimise nupp
+ Autoriseerin...
Proovitakse sisse logida...
Võrguühendust pole
Turvaline ühendus pole saadaval
@@ -158,11 +173,14 @@
Autentimisserveriga ühendumine ...
See server ei toeta seda autentimise viisi
%1$s ei toeta mitme konto kasutamist
+ Server ei tagasta korrektset kasutaja ID-d. Palun kontakteeru administraatoriga.
+⇥
+ Ei suuda autoriseerida selle serveriga.
Hoia faili ajakohasena
Nimeta ümber
Eemalda
- Oled sa kindel, et soovid %1$s eemaldada ?
- Kas sa tõesti soovid eemaldada %1$s ja selle sisu ?
+ Oled sa kindel, et soovid %1$s eemaldada?
+ Kas sa tõesti soovid eemaldada %1$s ja selle sisu?
Ainult kohalik
Ainult kohalik sisu
Eemalda serverist
@@ -174,10 +192,13 @@
Ümbernimetamine ebaõnnestus
Mujaloleva faili kontrollimine ebaõnnestus
Faili sisu on juba sünkroniseeritud
- Kausta loomine ebaõnnestus
+ Kataloogi ei saa tekitada
+ Keelatud sümbolid: / \\ < > : \" | ? *
+ Faili nime lahter ei saa olla tühi
Oota hetk
Ootamatu tõrge ; palun kasuta faili valimiseks mõnda teist rakendust
Ãœhtegi faili pole valitud
+ Saada link
Logi sisse oAuth2-ga
oAuth2 serveriga ühendumine...
Saidi identiteeti ei suudetud kinnitada
@@ -202,6 +223,8 @@
Saaja:
Allkiri:
Algoritm:
+ Ei suuda kuvada sertifikaati.
+ - Vea kohta puudub info
See on kohahoidja
placeholder.txt
PNG pilt
@@ -209,6 +232,7 @@
2012/05/18 12:23 PM
12:23:45
Lae pilte üles ainult läbi WiFi
+ Laadi videod üles ainult WiFi-t kasutades
/InstantUpload
Uuenduse konflikt
Serveris asuvat faili ei sünkroniseeritud kohaliku failiga. Jätkates kirjutatakse serveris asuva faili sisu üle.
@@ -217,16 +241,48 @@
Ära uuenda
Pildi eelvaade
Seda pilti ei saa näidata
- %1$s ei suudetud kopeerida kohalikku kataloogi failina %2$s
- Ebaõnnestunud kohene üleslaadimine
- Ebaõnnestunud kohesed üleslaadimised
- Kõikide ebaõnnestunud üleslaadimiste kokkuvõte
- vali kõik
- proovi uuesti kõik valitud
- eemalda kõik valitud üleslaadimise järjekorrast
- proovi uuesti pilti üles laadida:
- Lae veel pilte
- ära tee midagi, sa pole võrku ühendatud koheseks üleslaadimiseks
- Veateade:
- Palun kontrolli oma serveri seadeid, võib-olla on mahulimiit ületatud.
+ %1$s ei suudetud kopeerida kohalikku kataloogi %2$s
+ Ãœleslaadimise rada
+ Vabandust, server ei toeta jagamist. Palun kontakteeru
+⇥⇥administraatoriga.
+ Jagamine ebaõnnestus. Palun kontrolli, kas fail on olemas
+ Faili või kausta jagamisel esines viga
+ Liigutamise lõpetamine ebaõnnestus. Palun kontrolli, kas fail on olemas
+ Faili või kausta jagamise tühistamisel esines viga
+ Saada
+ Kopeeri link
+ Kopeeritud lõikepuhvrisse
+ Viga: ei suutnud operatsiooni lõpetada
+ Serveriga ühendumisel tekkis tõrge.
+ Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus
+ Serverilt vastuse ootamisel tekkis tõrge, toimingu sooritamine ebaõnnestus
+ Toimingu lõpetamine ebaõnnestus, server pole saadaval
+
+ Sul ei ole %s õigusi
+ selle faili ümbernimetamiseks
+ selle faili kustutamiseks
+ faili jagamiseks
+ faili jagamise lõpetamiseks
+ faili loomiseks
+ sellesse kausta laadimiseks
+ Fail ei ole serveris enam kättesaadav
+ Kontod
+ Lisa konto
+ Turvaline ühendus suunatakse läbi turvamata ühenduse.
+ Logid
+ Saada ajalugu
+ ownCloud Android rakenduse logid
+ Andmete laadimine...
+ Autentimine on vajalik
+ Vale parool
+ Tõsta ümber
+ Siin pole midagi. Sa võid lisada kausta!
+ Vali
+ Liigutamine ebaõnnestus. Palun kontrolli, kas fail on olemas
+ Kausta ei saa liigutada selle alamkausta
+ See fail on juba sihtkaustas olemas
+ Selle faili või kausta liigutamisel tekkis tõrge
+ selle faili liigutamiseks
+ Kohesed üleslaadimised
+ Turvalisus
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
new file mode 100644
index 0000000000..a9461fc06f
--- /dev/null
+++ b/res/values-eu-rES/strings.xml
@@ -0,0 +1,6 @@
+
+
+ Deskargatu
+ Ezeztatu
+
+
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 03c5705144..fec7404dbe 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -7,33 +7,39 @@
Beste app-en edukia
Fitxategiak
Ireki honekin
- Sortu karpeta
+ Karpeta berria
Ezarpenak
Xehetasunak
+ Bidali
Orokorra
Gehiago
Kontuak
Kontuak kudeatu
App PIN
Babestu zure bezeroa
- Gaitu berehalako igoera
+ Uneko irudi igoerak
Igo berehala kamerak ateratako argazkiak
+ Uneko bideo igoerak
+ Igo berehala kamerak filmatutako bideoak
Gaitu erregistroa
Arazoen erregistroa gordetzeko erabiltzen da
Erregistro historia
Honek gordetako erregistroak bistaratzen ditu.
Ezabatu historia
Laguntza
+ Lagun bati aholkatu
+ Oharrak
Imprint
+ Probatu %1$s zure telefono adimentsuan!
Egiaztatu zerbitzaria
- Zerbitzariaren helbidea
+ Zerbitzariaren helbidea https://
Erabiltzaile izena
Pasahitza
Berria %1$s-n?
Fitxategiak
Konektatu
Igo
- Hautatu igoera direktorioa:
+ Hautatu igoera karpeta:
Ez da konturik aurkitu
Zure gailuan ez dago %1$s konturik. Mesedez konfiguratu kontu bat lehenengo.
Konfiguratu
@@ -42,7 +48,9 @@
Ez da edukirik jaso. Ez dago ezer igotzeko.
%1$s-(e)k ez du baimenik elkarbanatutako edukian sartzeko
Igotzen
- Ez dago fitxategirik karpeta honetan.\nFitxategi berriak \"Igo\" menu aukerarekin gehi daitezke.
+ Ez dago ezer. Igo zerbait!
+ Kargatzen...
+ Ez dago fitxategirik karpeta honetan.
Sakatu fitxategi baten gainean informazio gehiago lortzeko
Tamaina:
Mota:
@@ -51,6 +59,8 @@
Deskargatu
Freskatu fitxaegia
Fitxategiaren izena %1$sra aldatu da igotzean
+ Elkarbanatu lotura
+ Lotura partekatzeari utzi
Bai
Ez
Ados
@@ -73,6 +83,7 @@
%1$s ongi igo da
igotzeak huts egin du
%1$s fitxategiaren igoera ezin izan da burutu
+ Huts egin du igotzen, berriro sartu behar duzu
Deskargatzen ...
%1$d%% Deskargatzen %2$s
Deskarga ongi burutu da
@@ -80,8 +91,10 @@
Deskargak huts egin du
%1$s fitxategiaren deskarga ezin izan da burutu
Oraindik deskargatu gabe
+ Huts egin du deskargatzen, berriro sartu behar duzu
Hautatu kontua
Sinkronizazioak huts egin du
+ Huts egin du sinkronizatzen, berriro sartu behar duzu
%1$s fitxategiaren sinkronizazioa ezin da burutu
Okerreko pasahitza %1$s-rako
Gatazkak aurkituak
@@ -90,6 +103,7 @@
%1$d fitxategien edukiak ezin dira sinkronizatu (%2$d gatazka)
Bertako fitxategi batzuk ahaztu dira
%2$s karpetako %1$d fitxategi ezin dira dira kopiatu
+ %1$s karpeta dagoeneko ez da existitzen
Mugitu denak
Fitxategi guztiak mugitu dira
Fitxategi batzuk ezin dira mugitu
@@ -115,6 +129,7 @@
Onartzen ez de euskarri kodeka
Euskarri fitxategia ezin da bihurtu
Euskarri fitxategia ezin da kodetu
+ Erreproduzitzen saiatzean denbora iraungitu da
Euskarri fitxategia ezin da jariotu
Euskarri fitxategia ezin erreproduzitu stock euskarri erreproduzigailuarekin
Segurtasun errorea %1$s erreproduzitzen saiatzean
@@ -123,18 +138,22 @@
Atzeratu botoia
Erreproduzitu edo pausatu botoia
Azkar aurreratu botoia
+ Baimena eskuratzen...
Saioa hasten saiatzen...
Ez dago sare konexiorik
Konexio segurua ez dago eskuragarri
Konexioa ezarri da
Konexioa probatzen...
gaizki egindako server konfigurazioa
+ Erabiltzaile eta zerbitzari hauendako dagoeneko kontu bat existitzen da gailu honetan
+ Sartutako erabiltzaileak ez du bat egiten kontu honetako erabiltzailearekin
Errore ezezagun bat gertatu da
Ezin izan da hostalaria aurkitu
ez da serveren instalaziorik aurkitu
Zerbitzariak denbora asko hartu du erantzuteko
Gaizki sortutako URLa
SSL abiaratzeak huts egin du
+ Ezin izan da SSL zerbitzariaren identitaea egiaztatu
server zerbitzari bertsio ezezaguna
Ezin izan da konexioa egin
Konexio segurua ezarri da
@@ -142,12 +161,20 @@
Baimena ez da lortu
Sarrera autorizazio zerbitzariak ukatua
Egoera esperogabea, mesedez idatzi berriz zerbitzari URLa
+ Zure baimena iraungitu da.
+Mesedez, baimendu berriz
Mesedez, sartu oraingo pasahitza
+ Zure saioa iraungitu da. Mesdez konektatu berriro
+ Konektatzen autentikazio zerbitzarira...
+ Zerbitzariak ez du autentikazio metodo hau onartzen
+ %1$s ez du kontu anitzak onartzen
+ Zure zerbitzariak ez du bueltatzen erabiltzailearen id egokia, mesedez jarri harremanetan administratzailearekin.
+ Ezin da autentikatu zerbitzarian.
Mantendu fitxategia eguneratuta
Berrizendatu
Ezabatu
- Nahi duzu %1$s ezabatu?
- Benetan %1$s eta bere eduki guztiak ezabatu nahi dituzu?
+ Ziur zaude %1$s ezabatu nahi duzula?
+ Ziru zaude %1$s eta bere edukiak ezabatu nahi dituzula?
Bertakoa bakarrik
Eduki lokalak bakarrik
Zerbitzaritik ezabatu
@@ -159,10 +186,14 @@
Izen aldaketa ezin izan da burutu
Urruneko fitxategia ezin izan da arakatu
Fitxategi edukiak dagoeneko sinkronizaturik
- Karpeta ezin da sortu
+ Ezin izan da karpeta sortu
+ Debekatutako karaktereak: / \\ < > : \" | ? *
+ Fitxategi izena ezin da hutsa izan
Itxaron momentu bat
Ezusteko arazoa; mesedez, saiatu beste app batekin fitxategia hautatzeko
Ez da fitxategirik hautatu
+ Bidali lotura honi...
+ Saioa hasi oAuth2-rekin
Konektatzen oAuth2 zerbitzarira...
Lekuaren identitatea ezin da egiaztatu
- Zerbitzariaren ziurtagiria ez da fidagarria
@@ -186,6 +217,8 @@
Noiz arte:
Sinadura:
Algoritmoa:
+ Ezin da ziurtagiria erakutsi.
+ - Ez dago errorearen gaineko informaziorik.
Hau leku-marka da
kokalekua.txt
PNG Irudia
@@ -193,6 +226,7 @@
2012/05/18 12:23 PM
12:23:45
Igo irudiak bakarrik WIFIren bidez
+ Igo bideoak bakarrik WIFIren bidez
/BerehalakoIgoerak
Igoera konfliktoa
Urruneko %s fitxategia ez dago bertako fitxategiarekin sinkronizatuta. Jarraituz gero zerbitzariko fitxategiaren edukia ordeztuko da.
@@ -201,16 +235,31 @@
Ez igo
Irudi aurreikuspena
Ezin da irudi hau erakutsi
- %1$s ezin da %2$s bertako karpetara kopiatu
- UnekoIgoerak huts egin du\"
- Uneko igoerek huts egin dute
- Huts egindako igoeren laburpena
- Hautatu dena
- Berriz saiatu hautatutakoak
- kendu hautatutakoak igoera-ilaratik
- Berriz saiatu irudia igotzen:
- Kargatu irudi gehiago
- ez egin ezer ez zaude on-line uneko igoerarentzat
- Hutsegite mezua:
- Egiaztatu zure konfigurazioa, agian zure kuota muga gainditu duzu.
+ %1$s ezin da %2$s karpeta lokalera kopiatu
+ Sentitzen dut, partekatzea ez dago zure zerbitzarian gaituta. Mesedez jarri harremanetan zure administratzailearekin.
+ Errore bat egon da fitxategaia edo karpeta partekatzerakoan
+ Errore bat egon da fitxategaia edo karpeta partekatzeari uzterakoan
+ Bidali
+ Lotura kopiatu
+ Arbelera kopiatua
+ Errore larria: ezin dira egin eragiketak
+ Errore bat gertatu da zerbitzariarekin konektatzean.
+ Errore bat gertatu da zerbitzariaren zain egon bitartean, ezin izan da eragiketa burutu
+ Errore bat gertatu da zerbitzariaren zain egon bitartean, ezin izan da eragiketa burutu
+ Eragiketa ezin izan da burutu, zerbitzaria ez dago erabilgarri
+
+ Ez daukazu baimenik %s
+ fitxategia berrizendatzeko
+ fitxategia ezabatzeko
+ fitxategia konpartitzeko
+ fitxategiaren konpartitzea kentzeko
+ fitxategia sortzeko
+ karpeta honetara igotzeko
+ Fitxategia jadanik ez dago eskuragarri zerbitzarian
+ Kontuak
+ Gehitu kontua
+ Autentikazioa beharrezkoa
+ Pasahitz okerra
+ Aukeratu
+ Segurtasuna
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 82336bc57d..6a22f893e4 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -7,32 +7,35 @@
Ù…Øتوا از دیگر برنامه ها
پرونده‌ها
باز کردن با
- ایجاد پوشه
+ پوشه جدید
تنظیمات
جزئیات
+ ارسال
عمومی
بیش‌تر
Øساب‌ها
مدیریت Øسابها
PIN برنامه
ØÙاظت از مشتری
- Ùعال کردن بارگذاری Ùوری
- Ùورا عکسهایی را Ú©Ù‡ با دوربین گرÙته شده است را آپلود Ú©Ù†
Ùعال کردن ورود
این برای مشکلات ورود استÙاده شده است.
تاریخچه ورود
این وقایع ثبت شده را نمایش می دهد.
Øذ٠تاریخچه
راه‌نما
+ پیشنهاد دادن به یک دوست
باز خورد
مهر زدن
- آدرس سرور
+ %1$s را بر روی گوشی هوشمند خود امتØان کنید.
+ چک کردن سرور
+ آدرس سرور https://…
نام کاربری
رمز عبور
+ جدید نسبت به %1$s?
پرونده‌ها
اتصال
بارگزاری
- انتخاب مسیر برای آپلود:
+ انتخاب پوشه آپلود:
هیچ Øسابی یاÙت نشد
هیچ Øسابی در %1$s بر روی دستگاه شما موجود نیست.لطÙا اول یک Øساب ترتیب دهید.
نصب
@@ -41,7 +44,9 @@
هیچ مطلبی دریاÙت نشده است. هیچ‌‌چیزی بارگزاری نشده.
%1$s اجازه ÛŒ دسترسی به Ù…Øتوای مشترک را نمی دهد
در Øال بارگزاری
- هیچ Ùایل در این پوشه نیست.\nÙایل های جدید Ù…ÛŒ توانند بوسیله ÛŒ گزینه ÛŒ \"بارگزاری\" در لیست اضاÙÙ‡ کنید.
+ اینجا هیچ چیز نیست.
+ درØال بارگذاری...
+ هیچ Ùایلی در این پوشه نیست.
روی هر Ùایل کلیک کنید تا اطلاعات اضاÙÛŒ نمایش داده شود.
اندازه
نوع:
@@ -50,6 +55,8 @@
بارگیری
بازنمایی Ùایل
Ùایل در هنگام بارگزاری به %1$s تغییر نام یاÙت
+ اشتراک گذاشتن لینک
+ لغو اشتراک گذاشتن لینک
بله
نه
باشه
@@ -82,18 +89,18 @@
Øساب کاربری را انتخاب کنید
همگام سازی ناموÙÙ‚
همگام سازی %1$s نتوانست به طور کامل انجام شود
+ رمز عبور نامعتبر برای %1$s
ناسازگاری ها یاÙت شدند
%1$d پرونده ها نمیتوانند همگام سازی شوند.
همگام سازی پرونده ها ناموÙÙ‚ بود.
Ù…Øتوای %1$d Ùایل ها نمی توانند همگام باشند(%2$d ناسازگاری)
بعضی از Ùایلهای Ù…ØÙ„ÛŒ Ùراموش شده اند
- در اینجا %1$d تعداد Ùایل از لیست %2$s نمی توانند Ú©Ù¾ÛŒ شوند
+ پوشه %1$s دیگر وجود ندارد
انتقال همه
همه ÛŒ Ùایل ها جا به جا شدند
بعضی از Ùایل ها نمی توانند انتقال یابند
Ù…ØÙ„ÛŒ: %1$s
دور از دسترس: %1$s
- Ùضایی به اندازه ÛŒ کاÙÛŒ برای Ú©Ù¾ÛŒ کردن Ùایل ها در پوشه ÛŒ %1$s نیست.آیا Ù…ÛŒ خواهید آنها را به جای دیگری انتقال دهید؟
لطÙا PIN برنامه خودتان را وارد کنید
PIN برنامه را وارد کنید
هر زمان که برنامه آغاز شود PIN درخواست خواهد شد.
@@ -113,6 +120,7 @@
کدک رسانه پشتیبانی نشده است.
Ùایل رسانه نمیتواند خوانده شود.
Ùایل رسانه به Ø´Ú©Ù„ صØÛŒØ Ø±Ù…Ø²Ú¯Ø°Ø§Ø±ÛŒ نشده است.
+ در Øین تلاش برای پخش کردن، مهلت به پایان رسیده است
Ùایل رسانه نمیتواند جریان داشته باشد.
Ùایل رسانه با استÙاده از پخش کننده stock media player قابل پخش نیست.
خطای امنیتی، تلاش برای پخش %1$s
@@ -121,28 +129,36 @@
دکمه عقبگرد
دکمه پخش یا توقÙ
دکمه رو به جلو سریع
+ تلاش برای ورود...
هیچ ارتباطی به شبکه موجود نیست
اتصال امن در دسترس نیست
اتصال برقرار شد
آزمایش اتصال...
پیکربندی سرور ناقص است
+ یک اکانت با همین نام کاربری و سرور بر روی این دستگاه موجود می‌باشد.
+ نام کاربری وارد شده با نام کاربری این اکانت مطابقت ندارد
خطای نامشخص رخ داده است!
میزبان را نمیتواند پیدا نماید.
نمونه ÛŒ سرور یاÙت نشد
زمان زیادی برای پاسخ سرور صورت گرÙت.
آدرس ناقص
مقداردهی SSL ناموÙÙ‚ بود.
+ نمی‌توان اصالت SSL سرور را اØراز نمود
نسخه ی سرور ناشناخته
نمیتوان ارتباط برقرار نمود.
ایجاد ارتباط ایمن
+ نام کاربری یا رمز ورود اشتباه است
اجازه ناموÙÙ‚
دسترسی توسط سرور اØراز هویت رد شده است.
Øالت غیرمنتظره؛ لطÙا آدرس URL سرور را مجددا وارد نمایید.
+ اØراز هویت شما منقضی شده است. لطÙا، مجددا اØراز هویت Ùرمایید.
+ لطÙاً رمز کاربری Ùعلی را وارد نمایید
+ اتصال به سرور اØراز هویت...
+ سرور این نوع اØراز هویت را پشتیبانی نمی‌کند
+ %1$s چند اکانته بودن را پشتیبانی نمی‌کند
Ùایل را به روز Ù†Ú¯Ù‡ دار
تغییرنام
ØØ°Ù
- آیا واقعا Ù…ÛŒ خواهید %1$s Øذ٠شود؟
- آیا واقعا Ù…ÛŒ خواهید %1$s Ùˆ Ù…Øتوای آن را Øذ٠کنید؟
Ùقط Ù…ØÙ„ÛŒ
Ùقط Ù…Øتوای Ù…ØÙ„ÛŒ
پاک کردن از سرور
@@ -154,10 +170,12 @@
نامگذاری نمی تواند به طور کامل انجام شود
پرونده های دور از دسترس نمی توانند بررسی شوند.
Ù…Øتوای Ùایل قبلا همگام شده
- Ùهرست را نمی توان ایجاد کرد
+ کاراکترهای ممنوع: / \\ < > : \" | ? *
Ù„Øظه‌ای صبر کنید
مشکل غیر متقربه، لطÙا پرونده را از یک برنامه متÙاوت انتخاب کنید.
هیچ پرونده‌ای انتخاب نشده است
+ ارسال لینک به ...
+ ورود با oAuth2
اتصال به سرور oAuth2 ...
هویت این سایت نمی تواند تایید شود
- گواهی سرور نامعتبر است
@@ -181,6 +199,8 @@
به:
امضا:
الگوریتم:
+ نمایش گواهینامه امکانپذیر نمی باشد
+ هیچ گونه اطلاعاتی درباره خطا وجود ندارد
این یک ØÙره است.
placeholder.txt
تصویربا Ùرمت PNG
@@ -188,6 +208,7 @@
2012/05/18 12:23 بعد از ظهر
12:23:45
تصاویر را Ùقط از طریق wifi بارگذاری Ú©Ù†
+ آپلود ویدیو Ùقط از طریق WiFi
آپلود Ùوری
بارگذاری ناسازگار
Ùایل های دور از دسترس %s با Ùایل های Ù…ØÙ„ÛŒ همگام نشده اند. ادامه کار، Ù…Øتوا را بر روی Ùایل در سرور جایگزین خواهد کرد.
@@ -195,17 +216,21 @@
دوباره نویسی
آپلود نکن
پیش نمایش تصویر
- این تصویر نمی تواند نمایش داده شود.
- %1$s در لیست Ù…ØÙ„ÛŒ %2$s نمی تواند Ú©Ù¾ÛŒ شود
- آپلود Ùوری انجام نشد\"
- آپلود های Ùوری انجام نشدند.
- خلاصه ای از تمام ارسال های Ùور ÛŒ ناموÙÙ‚.
- انتخاب همه
- تلاش مجدد بر روی همه موارد انتخاب شده
- Øذ٠تمام انتخاب شده ها از ص٠ارسال.
- تلاش برای آپلود کردن تصویر:
- بارگذاری تصاویر بیشتر
- هیچ کاری انجام ندهید، شما برای آپلود Ùوری آنلاین نیستید.
- پیغام عدم موÙقیت:
- لطÙا پیکربندی سرورتان را بررسی کنید، شاید سهمیه شما بیش از Øد شده باشد.
+ نمایش این عکس امکانپذیر نمی باشد
+ در Øین اشتراک گذاری این Ùایل یا پوشه خطایی رخ داده است
+ در Øین Øذ٠اشتراک گذاری این Ùایل یا پوشه خطایی رخ داده است
+ ارسال
+ کپی به کلیپ بورد
+ تکمیل عملیات امکانپذیر نمی باشد، سرور در دسترس نمی باشد
+
+ برای تغییر نام این Ùایل
+ برای Øذ٠این Ùایل
+ برای ایجاد این Ùایل
+ برای آپلود در این پوشه
+ این Ùایل دیگر روی سرور وجود ندارد
+ Øساب‌ها
+ اØراز هویت مورد نیاز است
+ رمز عبور اشتباه است
+ انتخاب کردن
+ امنیت
diff --git a/res/values-fi-rFI/strings.xml b/res/values-fi-rFI/strings.xml
index abed4d1f2c..6f02e4bcb5 100644
--- a/res/values-fi-rFI/strings.xml
+++ b/res/values-fi-rFI/strings.xml
@@ -7,27 +7,32 @@
Sisältö toisista sovelluksista
Tiedostot
Avaa sovelluksella
- Luo kansio
+ Uusi kansio
Asetukset
Tiedot
+ Lähetä
Yleiset
Enemmän
Tilit
Tilien hallinta
Sovelluksen PIN-koodi
- Suojaa Asiakasohjelmasi
- Käytä välitöntä lähetystä
+ Suojaa asiakasohjelmasi
+ Kuvien välitön lähetys
Lähetä kameralla otetut kuvat välittömästi
+ Välittömät videolähetykset
+ Lähetä kameralla kuvatut videot välittömästi
Käytä lokitusta
+ Tätä käytetään ongelmien lokitukseen
+ Lokihistoria
Tämä näyttää tallennetut lokit
Poista historia
Ohje
Suosittele kaverille
Palaute
Kokeile %1$sia älypuhelimellasi!
- Ota %1$s käyttöösi älypuhelimessa!\nLataa tästä: %2$s
+ Kutsun sinut käyttämään %1$sia älypuhelimellasi!\nLataa se tästä: %2$s
Tarkista palvelin
- Palvelimen osoite
+ Palvelinosoite https://…
Käyttäjätunnus
Salasana
Onko %1$s uusi tuttavuus sinulle?
@@ -43,7 +48,9 @@
Sisältöä ei saatu. Ei lähetettävää palvelimelle.
%1$silla ei ole oikeuksia jaettuun sisältöön
Lähetetään
- Tässä kansiossa ei ole tiedostoja.\nUusia tiedostoja voi lisätä käyttäen valikon \"Lähetä\"-toimintoa.
+ Täällä ei ole mitään. Lähetä tänne jotakin!
+ Ladataan...
+ Tässä kansiossa ei ole tiedostoja
Napauta tiedostoa nähdäksesi lisätietoja.
Koko:
Tyyppi:
@@ -52,6 +59,7 @@
Lataa
Päivitä tiedosto
Tiedoston nimeksi muutettiin %1$s siirron yhteydessä
+ Jaa linkki
Kyllä
Ei
OK
@@ -74,14 +82,18 @@
%1$s lähetettiin onnistuneesti
Lähetys epäonnistui
%1$s :n lähetys palvelimelle jäi kesken
+ Lähetys epäonnistui, kirjaudu uudelleen
Ladataan...
%1$d%% ladataan palvelimelta %2$s
Lataus tänne onnistui
%1$s ladattu palvelimelta onnistuneesti
Lataus epäonnistui
%1$s :n latausta ei pystytty suorittamaan loppuun asti
+ Ei vielä ladattu
+ Lataus epäonnistui, kirjaudu uudelleen
Valitse tili
Synkronointi epäonnistui
+ Synkronointi epäonnistui, kirjaudu uudelleen
Kohteen %1$s synkronointia ei voitu suorittaa loppuun
Virheellinen salasana tilille %1$s
Ristiriitoja löytynyt
@@ -106,10 +118,17 @@
%1$s (toistetaan)
%1$s (ladataan)
Mediatiedostoa ei löytynyt
+ Tiliä ei määritetty
+ Tiedosto ei ole kelvollisella tilillä
Mediatiedoston luku ei onnistunut
+ Aikakatkaisu toistoa yrittäessä
+ Mediatiedostoa ei voi suoratoistaa
+ Turvallisuusvirhe yrittäessä toistaa kohdetta %1$s
+ Odottamaton virhe yrittäessä toistaa kohdetta %1$s
Taaksepäin kelaus -painike
Toisto tai keskeytys -painike
Eteenpäin kelaus -painike
+ Noudetaan valtuutusta…
Yritetään kirjautua...
Ei verkkoyhteyttä
Salattu yhteys ei ole käytettävissä.
@@ -123,6 +142,7 @@
Palvelimen vastaus viipyy liian kauan
Väärin annettu osoite
SSL:n alustus epäonnistui
+ SSL-palvelimen identiteettiä ei voitu varmistaa
Tuntematon palvelimen versio
Yhteyden muodostus epäonnistui
Salattu yhteys muodostettu
@@ -135,11 +155,13 @@
Istunto vanhentui. Yhdistä uudelleen
Yhdistetään tunnistautumispalvelimeen…
Palvelin ei tue tätä tunnistautumistapaa
+ %1$s ei tue useita tilejä
+ Tunnistautuminen palvelinta vastaan ei onnistu
Pidä tiedosto ajan tasalla
Nimeä uudelleen
Poista
- Haluatko poistaa kohteen %1$s?
- Haluatko poistaa kohteen %1$s ja sen sisällön?
+ Haluatko varmasti poistaa kohteen %1$s?
+ Haluatko varmasti poistaa kohteen %1$s ja sen sisällön?
Vain paikallinen
Vain paikallinen sisältö
Poista palvelimelta
@@ -151,10 +173,13 @@
Nimen muutos epäonnistui
Etäpään tiedostoa ei voitu tarkistaa
Tiedoston sisältö on jo synkronoitu
- Kansion luonti epäonnistui
+ Kansion luominen epäonnistui
+ Kielletyt merkit: / \\ < > : \" | ? *
+ Tiedoston nimi ei voi olla tyhjä
Odota hetki
Odottamaton ongelma; kokeile valita tiedosto toisella sovelluksella
Tiedostoa ei valittu
+ Lähetä linkki…
Kirjaudu oAuth2:lla
Yhdistetään oAuth2-palvelimeen…
Sivuston identiteetin vahvistaminen ei onnistunut
@@ -179,18 +204,55 @@
Päättyen:
Allekirjoitus:
Algoritmi:
+ Varmennetta ei voi näyttää.
+ - Ei lisätietoja virheestä
PNG-kuva
389 kt
Lähetä kuvat vain WiFi-verkossa
+ Lähetä videot vain wifi-yhteydellä
/InstantUpload
Päivitysristiriita
Etätiedostoa %s ei ole synkronoitu paikallisen tiedoston kanssa. Jatkaminen korvaa palvelimella olevan tiedoston sisällön.
Säilytä molemmat
Korvaa
Älä lähetä
- Kuvaa ei voi näyttää
- valitse kaikki
- yritä uudelleen kaikkia valittuja
- Lataa lisää kuvia
- Virheviesti:
+ Kuvan esikatselu
+ Tätä kuvaa ei voi näyttää
+ Lähetyspolku
+ Jakaminen ei ole käytössä palvelimellasi. Ota yhteys
+ ylläpitäjään.
+ Virhe tiedoston tai kansion jakamista yrittäessä
+ Lähetä
+ Kopioi linkki
+ Kopioitu leikepöydälle
+ Kriittinen virhe: toimintoja ei voi suorittaa
+ Virhe palvelimeen yhdistäessä
+ Virhe palvelimen vastausta odottaessa, toimintoa ei voitu suorittaa
+ Virhe palvelimen vastausta odottaessa, toimintoa ei voitu suorittaa
+ Toimintoa ei voi suorittaa loppuun, palvelin ei ole käytettävissä
+
+ Sinulla ei ole oikeutta %s
+ nimetä tiedostoa uudelleen
+ poistaa tiedostoa
+ jakaa tiedostoa
+ poistaa tiedoston jakamista
+ luoda tiedostoa
+ lähettää tähän kansioon
+ Tämä tiedosto ei ole enää palvelimella käytettävissä
+ Tilit
+ Lisää tili
+ Lokit
+ Lähetä historia
+ ownCloudin Android-sovelluksen lokit
+ Ladataan tietoja...
+ Tunnistautuminen vaaditaan
+ Väärä salasana
+ Siirrä
+ Täällä ei ole mitään. Voit lisätä kansion!
+ Valitse
+ Siirto ei onnistu. Tarkista, ettei tiedostoa ole jo olemassa
+ Tiedosto on jo olemassa kohdekansiossa
+ Tämän tiedoston tai kansion siirtoa yrittäessä tapahtui virhe
+ Välittömät lähetykset
+ Tietoturva
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-fr-rCA/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index c63bc4c275..17da4a9701 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -7,17 +7,20 @@
Contenu d\'une autre application
Fichiers
Ouvrir avec
- Créer un répertoire
+ Nouveau dossier
Paramètres
Détails
+ Envoyer
Général
Plus
Comptes
Gestion des comptes utilisateur
Utilisation d\'un code de sécurité
- Protéger l\'accès aux données maniplulées par le client
- Activer le téléversement instantané
- Import instantané des photos prises par la caméra
+ Protéger l\'accès aux données manipulées par le client
+ Téléchargements instantanés d\'images
+ Téléversement instantané des photos prises par la caméra
+ Téléchargements instantanés de vidéos
+ Téléversement instantané des vidéos prises par la caméra
Activer les logs
Utilisé pour enregistrer les problèmes dans les logs
Historique des logs
@@ -28,25 +31,28 @@
Commentaires
Empreinte
Essayez %1$s sur votre smartphone !
- J\'aimerais vous inviter à utiliser %1$s sur votre smartphone !\nTéléchargez-le ici : %2$s
+ J\'aimerais vous inviter à utiliser %1$s sur votre smartphone !
+Téléchargez-le ici : %2$s
Vérifier le serveur
- Adresse du serveur
+ Adresse du serveur https://...
Nom d\'utilisateur
Mot de passe
Nouveau dans %1$s ?
Fichiers
Connecter
Téléverser
- Choisissez le répertoire de destination:
+ Sélectionner le dossier d\'envoi :
Aucun compte n\'a été trouvé
Aucun compte %1$s n\'a été trouvé. Veuillez commencer par en configurer un.
Paramètres
Quitter
Rien à envoyer
- Aucun contenu reçu. Rien à envoyer
+ Aucun contenu reçu. Rien à envoyer.
%1$s n\'est pas autorisé à accéder au contenu partagé
Téléversement
- Ce répertoire ne contient aucun fichier.\nDe nouveaux fichiers peuvent être importés en cliquant sur le bouton « Téléverser un fichier » du menu des options
+ Il n\'y a rien ici ! Envoyez donc quelque chose :)
+ Chargement…
+ Aucun fichier n\'est présent dans ce dossier.
Effleurez un fichier pour afficher les informations complémentaires
Taille :
Type :
@@ -55,6 +61,8 @@
Télécharger
Actualiser le fichier
Le fichier a été renommé en %s pendant le téléversement
+ Partager le lien
+ Ne plus partager ce lien
Oui
Non
OK
@@ -77,6 +85,7 @@
Le fichier %1$s a été envoyé avec succès
Échec de l\'envoi
L\'envoi de %1$s a échoué
+ Le téléversement a échoué, vous devez vous connecter à nouveau
Téléchargement en cours…
Téléchargement en cours de %2$s, %1$d%% effectués
Téléchargement réussi
@@ -84,8 +93,10 @@
Le téléchargement a échoué
Le téléchargement de %1$s a échoué
Pas encore téléchargé
+ Le téléchargement a échoué, vous devez vous connecter à nouveau
Choisissez un compte
La synchronisation a échoué
+ Échec de la synchronisation, vous devez vous reconnecter à nouveau
La synchronisation de %1$s ne peut pas être complétée
Mot de passe invalide pour %1$s
Des conflits ont été trouvés
@@ -94,14 +105,18 @@
Le contenu de %1$d fichiers n\'a put être synchronisé (%2$d conflits)
Certains fichiers locaux ont été oubliés
%1$d fichiers du dossier %2$s n\'ont pas pu être copiés dans
- Depuis la version 1.3.16, les fichiers téléversés depuis cet équipement sont copiés dans le dossier local %1$s pour éviter toute perte de données lorsqu\'un fichier est synchronisé avec plusieurs comptes.\n\nEn raison de ce changement, tous les fichiers téléversés avec une version antérieure de cette application étaient copiés dans le dossier %2$s. Cependant, une erreur empêchait l\'achèvement de cette opération pendant la synchronisation. Vous pouvez soit laisser les fichiers tels quels et supprimer le lien à %3$s, soit déplacer les fichiers dans le dossier %1$s et garder le lien vers %4$s.\n\nCi-dessous la liste des fichiers locaux, et les fichiers distants de %5$s auxquels ils étaient liés.
+ Depuis la version 1.3.16, les fichiers envoyé depuis ce périphérique sont copiés dans le dossier local %1$s pour éviter une perte de données lorsqu\'un même fichier est synchronisé avec plusieurs comptes.
+
+En raison de cette modification, tous les fichiers envoyés avec des versions antérieures de cette application ont été copiés dans le dossier %2$s. Cependant une erreur a empêché l\'achèvement de cette opération pendant la synchronisation du compte. Vous pouvez soit laisser les fichiers tels quels et supprimer le lien vers %3$s, soit déplacer les fichiers dans le dossier %1$s et garder le lien vers %4$s.
+
+Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxquels ils étaient liés.
Le dossier %1$s n\'existe plus
Tout déplacer
Tous les fichiers ont été déplacés
Certains fichiers n\'ont pu être déplacés
Local: %1$s
Distant: %1$s
- Il n\'y a pas assez de place disponible pour copier les fichiers sélectionnés dans le dossier %1$s. Voulez-vous les déplacer à la place ?
+ Il n\'y a pas assez de place disponible pour copier les fichiers sélectionnés dans le dossier %1$s. Voulez-vous quand même les déplacer ?
Veuillez saisir votre code de sécurité
Veuillez saisir votre code de sécurité
Le code PIN vous sera demandé à chaque lancement de l\'application
@@ -130,6 +145,7 @@
Bouton de rem-bobinage
Bouton de Lecture ou de Pause
Bouton d\'avance rapide
+ Demande d\'autorisation...
Tentative de connexion …
Pas de connexion réseau
Connexion sécurisée non disponible
@@ -148,7 +164,7 @@
La version du serveur n\'est pas reconnue
Impossible d\'établir la connexion
Connexion sécurisée établie
- Nom d\'utilisateur ou mot de passe invalide
+ Nom d\'utilisateur ou mot de passe incorrect
Echec d\'autorisation
Accès refusé par le serveur d\'autorisation
État inattendu ; veuillez entrer à nouveau l\'URL du serveur
@@ -158,6 +174,9 @@
Connexion au serveur d\'authentification...
Le serveur ne supporte pas cette méthode d\'authentification
%1$s ne supporte pas les comptes multiples
+ Votre serveur a retourné un identifiant d\'utilisateur incorrect. Veuillez prendre contact avec votre administrateur
+
+ Impossible de s\'authentifier sur ce serveur
Maintenir le fichier à jour
Renommer
Supprimer
@@ -174,10 +193,13 @@
Renommage impossible
Le fichier distant n\'a pu être vérifié
Le contenu des fichiers est déjà synchronisé
- Création du répertoire impossible
+ Le dossier n\'a pas pu être créé
+ Caractères interdits : / \\ < > : \" | ? *
+ Le nom du fichier ne peut pas être vide
Veuillez patienter
Problème inattendu ; veuillez essayer une autre app pour la sélection du fichier
Aucun fichier sélectionné
+ Envoyer un lien à …
Connexion avec aAuth2.
Connexion au serveur aAuth2...
L\'identité du site ne peut être vérifiée
@@ -202,13 +224,16 @@
À :
Signature :
Algorithme :
+ Impossible d\'afficher le certificat.
+ - Aucune information sur l\'erreur
Ceci est un espace réservé
placeholder.txt
Image PNG
389 Ko
18/05/2012 12:23
12:23:45
- Ne téléverser les images que via une connexion WiFi
+ Téléverser les images via une connexion WiFi uniquement
+ Téléverser les vidéos via une connexion WiFi uniquement
/TéléversementInstantané
Conflit de mise à jour
Le fichier distant %s n\'est pas synchronisé avec le fichier local. En choisissant de continuer, vous remplacerez le contenu de fichier sur le serveur.
@@ -217,16 +242,44 @@
Ne pas téléverser
Prévisualisation de l\'image
Cette image ne peut pas être affichée
- %1$s n\'a pas pu être copié vers le dossier local suivant %2$s
- Téléchargement instantané échoué
- Téléchargements instantanés échoués
- Résumé de tous les téléchargements instantanés échoués
- Tous sélectionner
- réessayer de tous sélectionner
- Supprimez tous les sélectionnés de la file d\'attente de téléchargement
- Ré-essayer de charger l\'image:
- Charger plus d\'images
- Ne rien faire vous n\'êtes pas connecté pour le téléchargement instantané
- Message d\'échec:
- Veuillez vérifier la configuration de votre serveur, peut-être que votre quota est dépassé.
+ %1$s n\'a pas pu être copié dans le dossier local %2$s
+ Désolé, le partage n\'est pas disponible sur votre serveur. Contactez votre administrateur, s\'il vous plait.
+ Impossible de partager. Vérifiez que le fichier est bien présent
+ Une erreur est survenue lors de la tentative de partage de ce fichier ou répertoire
+ Impossible de supprimer le partage. Vérifiez que le fichier est bien présent
+ Une erreur est survenue lors de la tentative d’annulation du partage de ce fichier ou répertoire
+ Envoyer
+ Copier le lien
+ Copié dans le presse-papiers
+ Erreur critique : impossible de réaliser des opérations
+ Une erreur s\'est produite pendant la connection au serveur
+ Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée.
+ Une erreur est survenue pendant l\'attente du serveur. L\'opération n\'a pas pu être effectuée.
+ L\'opération n\'a pas pu être terminée, le serveur n\'est pas disponible.
+
+ Vous ne possédez pas les droits suffisants %s
+ afin de renommer ce fichier
+ afin d’effacer ce fichier
+ afin de partager ce fichier
+ afin de ne plus partager ce fichier
+ afin de créer ce fichier
+ afin d’importer dans ce répertoire
+ Ce fichier n’est plus disponible sur le serveur
+ Comptes
+ Ajouter un compte
+ Journaux
+ Envoyer l\'historique
+ Journaux de l\'application Android ownCloud
+ Chargement des données...
+ Authentification requise
+ Mot de passe incorrect
+ Déplacer
+ Il n\'y a rien ici. Vous pouvez ajouter un dossier !
+ Choisir
+ Impossible de déplacer. Vérifiez que le fichier existe
+ Il n\'est pas possible de déplacer un dossier vers un de ses descendants
+ Le fichier existe déjà dans le dossier de destination
+ Une erreur est survenue lors de la tentative de déplacement de ce fichier ou dossier
+ de déplacer ce fichier
+ Sécurité
diff --git a/res/values-fy-rNL/strings.xml b/res/values-fy-rNL/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-fy-rNL/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index bd1b0d3395..c169179c0c 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -1,23 +1,26 @@
- Aplicativo Android %1$s
+ Aplicación Android %1$s
versión %1$s
Actualizar a conta
Enviar
- Contido doutros aplicativos
+ Contido doutras aplicacións
Ficheiros
Abrir con
- Crear un directorio
+ Novo cartafol
Preferencias
Detalles
+ Enviar
Xeral
Máis
Contas
Xestionar as contas
- PIN do aplicativo
+ PIN da aplicación
Protexe o seu cliente
- Activar o envÃo instantáneo
+ EnvÃo instantáneo de fotos
Enviar instantaneamente as fotos tiradas coa cámara
+ EnvÃo instantáneo de vÃdeos
+ Enviar instantaneamente os vÃdeos gravados coa cámara
Activar o rexistro
Isto empregase para rexistrar os problemas
Historial do rexistro
@@ -28,16 +31,15 @@
Comentarios
Impresión
Tente %1$s no seu teléfono intelixente!
- Quero convidalo a empregar %1$s no seu teléfono intelixente!âŽ\nDescárgueo de aquÃ:%2$s
Comprobar o servidor
- Enderezo do servidor
+ Enderezo do servidor https://…
Nome de usuario
Contrasinal
Novo en %1$s?
Ficheiros
Conectar
Enviar
- Escolla o directorio para o envÃo:
+ Escolla o cartafol de envÃo:
Non se atoparon contas
Non hai contas de %1$s no seu dispositivo. Cree unha nova conta primeiro.
Instalación
@@ -46,7 +48,9 @@
Non se recibiu contido. Non hai nada para enviar.
%1$s non ten permiso para acceder ao contido compartido
Enviando
- Non hai ficheiros neste cartafol.\nOs novos ficheiros pódense engadir ca opción do menú «Enviar».
+ Aquà non hai nada. EnvÃe algo!
+ Cargando...
+ Non hai ficheiros neste cartafol.
Prema nun ficheiro para que amose a información adicional.
Tamaño:
Tipo:
@@ -55,6 +59,8 @@
Descargar
Actualizar o ficheiro
O ficheiro foi renomeado a %1$s durante o envÃo
+ Ligazón para compartir
+ Deixar de compartir a ligazón
Si
Non
Aceptar
@@ -70,13 +76,14 @@
Eliminar a conta
Crear unha conta
Enviar desde…
- Nome do directorio
+ Nome do cartafol
Enviando…
%1$d%% enviando %2$s
Enviado correctamente
%1$s foi enviado correctamente
Produciuse un fallou no envÃo
Non foi posÃbel completar o envÃo de %1$s
+ Fallou o envÃo, necesita volver acceder
Descargando…
%1$d%% descargando %2$s
Completouse a descarga
@@ -84,8 +91,10 @@
Produciuse un fallo na descarga
Non foi posÃbel completar a descarga de %1$s
Non descargado aÃnda
+ Fallou a descarga, necesita volver acceder
Escoller unha conta
Produciuse un fallo na sincronización
+ Fallou a sincronización, necesita volver acceder
Non foi posÃbel completar a sincronización de %1$s
Contrasinal incorrecto para %1$s
Atopáronse conflictos
@@ -93,8 +102,7 @@
Produciuse unha falla no mantemento sincronizado de ficheiros
Non foi posÃbel sincronizar o contido de %1$d ficheiros (%2$d conflitos)
Algúns ficheiros locais foron esquecidos
- Non é posÃbel copiar %1$d ficheiros do directorio %2$s en
- Desde a versión 1.3.16, os ficheiros enviados desde este dispositivo cópianse no cartafol local %1$s para evitar a perda de datos cando se sincroniza un ficheiro con varias contas.\n\nPor mor deste cambio, todos os ficheiros enviados nas versións anteriores deste aplicativo cópianse no cartafol %2$s. Porén, un erro impediu a finalización desta operación durante a sincronización da conta. É posÃbel deixar o(s) ficheiro(s) como está(n) e retirar a ligazón a %3$s, ou mover o(s) ficheiro(s) ao directorio %1$s e manter a ligazón a %4$s.\n\nA seguir enuméranse o(s) fichero(s) local(is), e o(s) fichero(s) remoto(s) en %5$s co(s) que estaba(n) ligados.
+ Non é posÃbel copiar %1$d ficheiros do cartafol %2$s en
O cartafol %1$s xa non existe
Mover todo
Foron movidos todos os ficheiros
@@ -102,15 +110,15 @@
Local: %1$s
Remoto: %1$s
Non hai espazo abondo para copiar os ficheiros seleccionados no cartafol %1$s. Quere movelos no canto de copialos?
- Insira o seu PIN do aplicativo
- Introduza o seu PIN do aplicativo
- Pediráselle o PIN cada vez que se inicie o aplicativo
- Volva a introducir o seu PIN do aplicativo
- Retirar o seu PIN do aplicativo
- Os PIN do aplicativo non son iguais
- PIN do aplicativo incorrecto
- O PIN do aplicativo foi retirado
- Almacenouse o PIN do aplicativo
+ Insira o seu PIN da aplicación
+ Introduza o seu PIN da aplicación
+ Pediráselle o PIN cada vez que se inicie a aplicación
+ Volva a introducir o seu PIN da aplicación
+ Retirar o seu PIN da aplicación
+ Os PIN da aplicación non son iguais
+ O PIN da aplicación é incorrecto
+ O PIN da aplicación foi retirado
+ Almacenouse o PIN da aplicación
%1$s reprodutor musical
%1$s (reproducindo)
%1$s (cargando)
@@ -130,6 +138,7 @@
Botón de retroceso
Botón de reprodución/pausa
Botón de avance rápido
+ Obtendo a autorización...
Intentando acceder...
Sen conexión de rede
Non hai conexión seguras dispoñÃbeis.
@@ -154,15 +163,18 @@
Estado inesperado, introduza de novo o enderezo URL do servidor
A súa autorización caducou. AutorÃcese de novo
Introduza o contrasinal actual
- A súa sesión caducou. AutorÃcese de novo
+ A súa sesión caducou. Acceda de novo
Conectando co servidor de autenticación…
O servidor non admite este método de autenticación
%1$s non admite contas múltipes
+ O seu servidor non devolveu un ID de usuario correcto, contacte cun administrador
+
+ Non pode autenticarse neste servidor
Manter actualizado o ficheiro
Renomear
Retirar
- Confirma que quere retirar %1$s ?
- Confirma que quere retirar %1$s e o seu contido ?
+ Confirma que quere retirar %1$s?
+ Confirma que quere retirar %1$s e o seu contido?
Só local
Só contidos locais
Retirar do servidor
@@ -174,10 +186,13 @@
Non foi posÃbel completar a operación de cambio de nome
Non foi posÃbel comprobar o ficheiro remoto
Os contidos do ficheiro xa están sincronizados
- Non foi posÃbel crear o directorio
+ Non foi posÃbel crear o cartafol
+ Caracteres non permitidos: / \\ < > : \" | ? *
+ O nome de ficheiro non pode estar baleiro
Agarde un chisco
- Produciuse un erro non agardado. Seleccione o ficheiro con outro aplicativo diferente
+ Produciuse un erro non agardado. Seleccione o ficheiro con outra aplicación diferente
Non se escolleu ningún ficheiro
+ Enviar a ligazón a ...
Acceder con oAuth2
Conectando co servidor oAuth2…
Non foi posÃbel verificar a identidade do sitio
@@ -202,13 +217,16 @@
A:
Sinatura:
Algoritmo:
+ Non é posÃbel amosar o certificado.
+ - Non hai información sobre este erro
Isto é un marcador de posición
- marcador_de_posición.txt
+ placeholder.txt
Imaxe PNG
389 KB
2012/05/18 12:23 PM
12:23:45
Enviar imaxes só medinte WiFi
+ Enviar os vÃdeos só a través de WiFi
/EnvÃoInstantáneo
Conflito de actualización
O ficheiro remoto %s non está sincronizado co ficheiro local. Continuando substituirase o contido do ficheiro no servidor.
@@ -217,16 +235,33 @@
Non enviar
Vista previa da imaxe
Esta imaxe non pode ser amosada
- Non foi posÃbel copiar %1$s no directorio local %2$s
- produciuse un fallo de EnvÃoInstantáneo»
- EnvÃos instantáneos fallados
- Resumo de todos os envÃos instantáneos fallados
- seleccionar todo
- tentar de novo todo o seleccionado
- eliminar todo o seleccionado da cola de envÃo
- tentar de novo o envÃo da imaxe:
- Cargar máis imaxes
- non facer nada que non estea en liña para o envÃo instantáneo
- Mensaxe de fallo:
- Comprobe a configuración do seu servidor. é probábel que xa excedera a cota.
+ Non foi posÃbel copiar %1$s no cartafol local %2$s
+ O seu servidor non ten activada a opción de compartir. Póñase en contacto co
+ administrador.
+ Produciuse un erro ao tentar compartir este ficheiro ou cartafol.
+ Produciuse un erro ao tentar deixar de compartir este ficheiro ou cartafol
+ Enviar
+ Copiar a ligazón
+ Copiado no portapapeis.
+ Produciuse un erro crÃtico: non é posÃbel realizar as operacións
+ Produciuse un erro mentres conectaba co servidor.
+ Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin
+ Produciuse un erro mentres agardaba polo servidor, a operación non se puido levar a fin
+ A operación non se completou, o servidor non está dispoñÃbel
+
+ Non ten permisos %s
+ para renomear este ficheiro
+ para eliminar este ficheiro
+ para compartir este ficheiro
+ para deixar de compartir este ficheiro
+ para crear o ficheiro
+ para envialo a este cartafol
+ O ficheiro xa non está dispoñÃbel no servidor
+ Contas
+ Engadir unha conta
+ RequÃrese autenticación
+ Contrasinal incorrecto
+ Mover
+ Escoller
+ Seguranza
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-gu/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-he/strings.xml b/res/values-he/strings.xml
index 71c8b9dfec..4ae0072df8 100644
--- a/res/values-he/strings.xml
+++ b/res/values-he/strings.xml
@@ -1,27 +1,45 @@
+ %1$s ×פליקציית ×× ×“×¨×•×יד
+ גרסה %1$s
+ ×¨×¢× ×•×Ÿ חשבון
העל××”
תוכן ×ž×™×™×©×•×ž×™× ×חרי×
קבצי×
- יצירת תיקייה
+ פתיחה על בסיס
+ תיקייה חדשה
הגדרות
פרטי×
+ שליחה
כללי
יותר
×—×©×‘×•× ×•×ª
× ×™×”×•×œ ×—×©×‘×•× ×•×ª
קוד יישו×
×”×’× ×” על הלקוח שלך
- הפעלת העל×ות מהירות
- העל××” מהירה של ×ª×ž×•× ×•×ª שמצולמות במצלמה שלך
+ העל×ת ×ª×ž×•× ×•×ª מהירה
+ העל××” מהירה של ×ª×ž×•× ×•×ª שצולמו במצלמה
+ העל×ת ×¡×¨×˜×™× ×ž×”×™×¨×”
+ העל××” מהירה של ×¡×¨×˜×™× ×©×¦×•×œ×ž×• במצלמה
+ הפעלת תעוד
+ משמש לתיעוד בעיות
+ היסטוריית תעוד
+ מר××” ×ת ×™×•×ž× ×™ התעוד
+ מחיקת היסטוריה
עזרה
- כתובת שרת
+ המלצה לחבר
+ משוב
+ חותמת
+ לבדיקה %1$s בטלפון ×”×—×›× ×©×œ×š!
+ בודק שרת
+ כתובת שרת https://…
×©× ×ž×©×ª×ž×©
ססמה
+ חדש ב- %1$s?
קבצי×
התחברות
העל××”
- × × ×œ×‘×—×•×¨ ×ת תיקיית ההעל××”:
+ בחירת תיקיית העל××”:
×œ× × ×ž×¦× ×—×©×‘×•×Ÿ
×ין ×—×©×‘×•× ×•×ª %1$s בהתקן שלך. × × ×œ×”×’×“×™×¨ חשבון תחילה.
הגדרות
@@ -30,14 +48,19 @@
×œ× ×”×ª×§×‘×œ תוכן. ×ין מה להעלות.
ל־%1$s ×ין הרש××” לגשת לתוכן המשותף שלך
בהעל××”
- ×ין ×§×‘×¦×™× ×‘×ª×™×§×™×™×” זו.\n× ×™×ª×Ÿ להוסיף ×§×‘×¦×™× ×—×“×©×™× ×‘×¢×–×¨×ª ×”×פשרות „העל×ה“ מהתפריט.
+ ×ין ×›×ן ×©×•× ×“×‘×¨. ×ולי ×‘×¨×¦×•× ×š להעלות משהו?
+ ×‘×˜×¢×™× ×”...
+ ×ין ×§×‘×¦×™× ×‘×ª×™×§×™×™×” זו:
יש לגעת בקובץ כדי להציג ×¤×¨×˜×™× × ×•×¡×¤×™×.
גודל:
סוג:
מועד היצירה:
מועד ×”×©×™× ×•×™:
הורדה
+ ×¨×¢× ×•×Ÿ קובץ
×©× ×”×§×•×‘×¥ ×”×©×ª× ×” ל־ %1$s במהלך ההעל××”
+ קישור לשיתוף
+ ביטול קישור לשיתוף
כן
ל×
×ישור
@@ -60,25 +83,34 @@
%1$s × ×©×œ×— בהצלחה
ההעל××” × ×›×©×œ×”
×ין ×פשרות ×œ×”×©×œ×™× ×ת ההעל××” של %1$s
+ העל××” × ×›×©×œ×”, יש להתחבר מחדש
בהורדה …
%1$d%% בהורדה %2$s
ההורדה הצליחה
%1$s התקבל בהצלחה
ההורדה × ×›×©×œ×”
×œ× × ×™×ª×Ÿ ×œ×”×©×œ×™× ×ת ההורדה של
+ ×œ× ×”×•×¨×“ עדיין
+ הורדה × ×›×©×œ×”, יש להתחבר מחדש
× × ×œ×‘×—×•×¨ בחשבון
×”×¡× ×›×¨×•×Ÿ × ×›×©×œ
+ ×¡× ×›×¨×•×Ÿ × ×›×©×œ, יש להתחבר מחדש
×œ× × ×™×ª×Ÿ ×œ×”×©×œ×™× ×ת ×”×¡× ×›×¨×•×Ÿ של
+ ×¡×™×¡×ž× ×©×’×•×™×™×” עבור %1$s
× ×ž×¦×ו ×”×ª× ×’×©×•×™×•×ª
×œ× × ×™×ª×Ÿ ×œ×¡× ×›×¨×Ÿ %1$d ×§×‘×¦×™× ×©×”×•×’×“×¨×• ×œ×¡× ×›×¨×•×Ÿ
×§×‘×¦×™× ×©×”×•×’×“×¨×• ×œ×¡× ×›×¨×•×Ÿ × ×›×©×œ×•
×œ× × ×™×ª×Ÿ ×œ×¡× ×›×¨× ×ת ×ª×•×›× × ×©×œ %1$d ×ž×”×§×‘×¦×™× (%2$d ×”×ª× ×’×©×•×™×•×ª)
חלק ×ž×”×§×‘×¦×™× ×”×ž×§×•×ž×™×™× × ×©×›×—×•
+ ×§×‘×¦×™× %1$d מחוץ לתיקיית %2$s ×œ× × ×™×ª×Ÿ להעתיק ×ל
+ החל מגרסה 1.3.16, ×§×‘×¦×™× ×©×”×•×¢×œ×• ממכשיר ×–×” ×ž×•×¢×ª×§×™× ×œ×ª×™×§×™×™×” מקומית %1$s כדי ×œ×ž× ×•×¢ ×יבוד מידע ×›×שר קובץ בודד ×ž×¡×•× ×›×¨×Ÿ למספר ×—×©×‘×•× ×•×ª.\n\nבשל ×©×™× ×•×™ ×–×”, כל ×”×§×‘×¦×™× ×©×”×•×¢×œ×• ל×פליקציה בגרס×ות קודמות הועתקו לתיקייה %2$s . ×¢× ×–×ת, שגי××” ×ž×•× ×¢×ª ×ת השלמת התהליך בזמן ×¡× ×›×¨×•×Ÿ חשבון. × ×™×ª×Ÿ להש×יר ×ת הקובץ (קבצי×) כמו ×©×”× ×•×œ×ž×—×•×§ ×ת הקישור ×ל %3$s, ×ו העברת הקובץ (קבצי×) לתיקיית %1$s ושמירת הקישור ×ל %4$s.\n\nלמטה × ×™×ª×Ÿ לר×ות ×ת רשימת הקובץ (קבצי×) ×”×ž×§×•×ž×™×™× ×•×”×§×•×‘×¥ (קבצי×) ב- %5$s ××œ×™×”× ×”× ×ž×§×•×©×¨×™×.
+ תיקיית %1$s ××™× ×” קיימת עוד
להעביר הכול
כל ×”×§×‘×¦×™× ×”×•×¢×‘×¨×•
×œ× × ×™×ª×Ÿ להעביר חלק מהקבצי×
מקומי: %1$s
מרוחק: %1$s
+ ×ין מספיק ×ž×§×•× ×œ×”×¢×ª×§×ª ×”×§×‘×¦×™× ×©× ×‘×—×¨×• ×ל תיקיית %1$s . ×”×× ×œ×”×¢×‘×™×¨ ××•×ª× ×‘×ž×§×•×?
× × ×œ×”×–×™×Ÿ ×ת קוד ×”×™×™×©×•× ×©×œ×š
× × ×œ×”×–×™×Ÿ ×ת קוד ×”×™×™×©×•× ×©×œ×š
תופיע בקשה לקוד בכל ×¤×¢× ×©×”×™×™×©×•× ×ž×•×¤×¢×œ
@@ -91,31 +123,59 @@
× ×’× ×Ÿ המוזיקה %1$s
%1$s (×ž×ª× ×’×Ÿ)
%1$s (×‘×˜×¢×™× ×”)
+ השמעת %1$s הסתיימה
×œ× × ×ž×¦× ×§×•×‘×¥ מדיה
×œ× ×¦×•×™×Ÿ חשבון
הקובץ ××™× ×• בחשבון ×ª×§× ×™
מקודד המדיה ××™× ×• × ×ª×ž×š
×œ× × ×™×ª×Ÿ ×œ×§×¨×•× ×ת קובץ המדיה
+ קובץ מדיה ×œ× ×§×•×“×“ כהלכה
+ פסק זמן בעת × ×™×¡×™×•×Ÿ ×”× ×™×’×•×Ÿ
+ ×œ× × ×™×ª×Ÿ ×œ×”×–×¨×™× ×ת קובץ המדיה
+ קובץ המדיה ×œ× × ×™×ª×Ÿ ×œ× ×™×’×•×Ÿ ב×מצעות × ×’×Ÿ המדיה הקבוע
+ שגי×ת הבטחה בזמן × ×™×¡×™×•×Ÿ × ×™×’×•×Ÿ %1$s
+ שגי×ת קלט בזמן × ×™×¡×™×•×Ÿ × ×™×’×•×Ÿ %1$s
+ שגי××” ×œ× ×¦×¤×•×™×” בזמן × ×™×¡×™×•×Ÿ × ×™×’×•×Ÿ %1$s
+ לחצן החזרה ×חורה
+ לחצן × ×™×’×•×Ÿ ×ו השהייה
+ לחצן הרצה קדימה
+ מקבל ×ישורי×...
מתבצע × ×™×¡×™×•×Ÿ ×›× ×™×¡×”â€¦
×ין חיבור ל××™× ×˜×¨× ×˜
×ין חיבור מוצפן זמין.
החיבור × ×•×¦×¨
החיבור × ×‘×“×§â€¦
תצורת השרת פגומה
+ חשבון ל×ותו משתמש ושרת כבר ×§×™×™× ×‘×ž×›×©×™×¨ ×–×”
+ ×©× ×”×ž×©×ª×ž×© ×©×”×•×›× ×¡ ×œ× ×ž×ª××™× ×œ×©× ×”×ž×©×ª×ž×© של חשבון ×–×”
×ירעה שגי××” בלתי ידועה!
×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×ת המ×רח
×œ× × ×ž×¦× ×ž×•×¤×¢ שרת
לשרת לקח יותר מדי זמן להגיב
כתובת שגויה
הפעלת ×”Ö¾SSL × ×›×©×œ×”
+ זהות ×”- SSL של השרת ×œ× × ×™×ª× ×ª ל×ימות
גרסה השרת ××™× ×” מזוהה
×œ× × ×™×ª×Ÿ ליצור ×ת החיבור
× ×•×¦×¨ חיבור מ×ובטח
+ ×©× ×ž×©×ª×ž×© ×ו ×¡×™×ž× ×©×’×•×™×™×
+ ×ישור ×œ× ×ž×•×¦×œ×—
+ גישה × ×“×—×ª×” על ידי שרת ×”×ימות
+ מצב ×œ× ×¦×¤×•×™; יש ×œ×”×›× ×™×¡ בבקשה שוב ×ת כתובת השרת
+ ×”×ישור שלך פג. × × ×œ×‘×¦×¢ ×ישור מחדש
+ × × ×œ×”×–×™×Ÿ סיסמה × ×•×›×—×™×ª
+ זמן ההתקשרות שלך הסתיי×. יש להתחבר מחדש
+ מתחבר לשרת ×ימות...
+ השרת ××™× ×• תומך בשיטת ×ימות זו
+ %1$s ××™× ×• תומך בריבוי ×—×©×‘×•× ×•×ª
+ השרת ××™× ×• מחזיר מספר משתמש × ×›×•×Ÿ, יש ליצור קשר ×¢× ×ž× ×”×œ
+⇥
+ ×œ× ×ž×¦×œ×™×— ל×מת מול השרת
לשמור על קובץ ×¢×“×›× ×™
×©×™× ×•×™ ש×
הסרה
- ×”×× ×כן להסיר ×ת
- ×”×× ×כן ×‘×¨×¦×•× ×š להסיר ×ת %1$s על כל ×ª×•×›× ×• ?
+ ×”×× ×‘×מת להסיר %1$s?
+ ×”×× ×‘×מת להסיר %1$s ו×ת כל התכולה?
מקומי בלבד
×ª×›× ×™× ×ž×§×•×ž×™×™× ×‘×œ×‘×“
הסרה מהשרת
@@ -127,10 +187,15 @@
×œ× × ×™×ª×Ÿ ×œ×”×©×œ×™× ×ת פעולת ×©×™× ×•×™ הש×
×œ× × ×™×ª×Ÿ לבדוק ×ת הקובץ המרוחק
תוכן הקובץ כבר ×ž×¡×•× ×›×¨×Ÿ
- ×œ× × ×™×ª×Ÿ ליצור ×ת התיקייה
+ ×œ× × ×™×ª×Ÿ ליצור תיקייה
+ ×ª×•×•×™× ×סורי×: / \\ < > : \" | ? *
+ ×©× ×§×•×‘×¥ ×œ× ×™×›×•×œ להיות ריק
× × ×œ×”×ž×ª×™×Ÿ רגע
תקלה בלתי צפויה ; × × ×œ×‘×—×•×¨ בקובץ ×ž×™×™×©×•× ×חר
×œ× × ×‘×—×¨×• קבצי×
+ שליחת קישור ×ל ...
+ התחברות ב×מצעות oAuth2
+ התחברות ×ל שרת oAuth2…
×œ× × ×™×ª×Ÿ ל×מת ×ת זהות ×”×תר
- תעודת השרת ××™× ×” ×ž×”×™×ž× ×”
- תוקף תעודת השרת פג
@@ -153,22 +218,48 @@
סיו×:
חתימה:
×לגורית×:
+ ×œ× × ×™×ª×Ÿ להר×ות ×ת תעודת ×”×ישור.
+ - ×ין מידע על השגי××”
זהו ×ž×ž×œ× ×ž×§×•×
+ placeholder.txt
×ª×ž×•× ×ª PNG
389 ק״ב
+ 2012/05/18 12:23 PM
+ 12:23:45
העל×ת ×ª×ž×•× ×•×ª דרך WiFi בלבד
+ העל×ות קבצי ויד×ו על בסיס WiFi בלבד
/InstantUpload
×”×ª× ×’×©×•×ª עדכון
הקובץ המרוחק %s ××™× ×• ×ž×¡×•× ×›×¨×Ÿ ×¢× ×”×§×•×‘×¥ המקומי. בחירה בהמשך התהליך תחליף ×ת תוכן הקובץ בשרת.
להש×יר ×ת ×©× ×™×”×
לשכתב
×œ× ×œ×”×¢×œ×•×ª
- ×”×¡×™×›×•× ×©×œ כל ההעל×ות המהירות ×©× ×›×©×œ×•
- לבחור הכול
- ×œ× ×¡×•×ª שוב ×ת כל ×”× ×‘×—×¨×™×
- למחוק ×ת כל ×”× ×‘×—×¨×™× ×ž×ª×•×¨ ההעל××”
- ×œ× ×¡×•×ª להעלות ×ת ×”×ª×ž×•× ×” מחדש:
- ×˜×¢×™× ×ª ×ª×ž×•× ×•×ª × ×•×¡×¤×•×ª
- הודעת התקלה:
- × × ×œ×‘×“×•×§ ×ת תצורת שרת שלך, יתכן שחרגת מהמיכסה שלך.
+ תצוגה מקדימה ×œ×ª×ž×•× ×”
+ ×ª×ž×•× ×” זו ×œ× × ×™×ª× ×ª לצפייה
+ %1$s ×œ× × ×™×ª×Ÿ להעתקה לתיקייה מקומית %2$s
+ מצטערי×, שיתוף ××™× ×• מורשה על השרת שלך. יש ליצור קשר ×¢×
+â‡¥â‡¥×ž× ×”×œ.
+ שגי××” ×ירעה בזמן × ×™×¡×™×•×Ÿ לשתף קובץ ×–×” ×ו תיקייה זו
+ שגי××” ×ירעה בזמן × ×™×¡×™×•×Ÿ לבטל שיתוף לקובץ ×–×” ×ו לתיקייה זו
+ שליחה
+ העתקת קישור
+ הועתק ללוח ×”×’×–×™×¨×™× - clipboard
+ שגי××” קריטית: ×œ× × ×™×ª×Ÿ לבצע ×ת הפעולות
+ שגי××” ×ירעה בזמן חיבור לשרת.
+ שגי××” ×ירעה בזמן ×”×ž×ª× ×” לשרת, הפעולה ×œ× ×”×™×™×ª×” × ×™×ª× ×ª להשלמה
+ שגי××” ×ירעה בזמן ×”×ž×ª× ×” לשרת, הפעולה ×œ× ×”×™×™×ª×” × ×™×ª× ×ª להשלמה
+ ×œ× × ×™×ª×Ÿ ×œ×”×©×œ×™× ×ת הפעולה, השרת ××™× ×• זמין
+
+ ×ין לך הרש×ות %s
+ ×œ×©× ×•×ª ×©× ×œ×§×•×‘×¥ ×–×”
+ למחוק קובץ זה
+ לשתף קובץ זה
+ לבטל שיתוף לקובץ זה
+ ליצור קובץ
+ להעל××” לתיקייה זו
+ הקובץ ××™× ×• זמין יותר על השרת
+ ×—×©×‘×•× ×•×ª
+ הוספת חשבון
+ בחירה
+ ×בטחה
diff --git a/res/values-hi-rIN/strings.xml b/res/values-hi-rIN/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-hi-rIN/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index da6fb71ded..6d0355c7c7 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -1,11 +1,31 @@
+ %1$s à¤à¤£à¥à¤¡à¥à¤°à¥‰à¤¯à¤¡ à¤à¤ªà¥à¤ª
+ संसà¥à¤•à¤°à¤£ %1$s
+ खाता रिफà¥à¤°à¥‡à¤¶ करें
अपलोड
+ अनà¥à¤¯ à¤à¤ªà¥à¤ªà¥à¤¸ से सामगà¥à¤°à¥€
+ फाइलें
+ के साथ खोलें
+ नया फ़ोलà¥à¤¡à¤°
सेटिंगà¥à¤¸
+ विवरण
+ à¤à¥‡à¤œà¥‡à¤‚
सामानà¥à¤¯
- सहयोग
- पà¥à¤°à¤¯à¥‹à¤•à¥à¤¤à¤¾ का नाम
+ और अधिक
+ खाते
+ à¤à¤ªà¥à¤ª पिन
+ अपने उपà¤à¥‹à¤•à¥à¤¤à¤¾ की सà¥à¤°à¤•à¥à¤·à¤¾ करें
+ सहायता
+ उपà¤à¥‹à¤•à¥à¤¤à¤¾ का नाम
पासवरà¥à¤¡
+ फाइलें
+ जà¥à¥œà¥‡à¤‚
अपलोड
+ रदà¥à¤¦ करें
तà¥à¤°à¥à¤Ÿà¤¿
+ विवरण
+ à¤à¥‡à¤œà¥‡à¤‚
+
+ खाते
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index b55e3d94bd..b8dcfc5b1a 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -2,8 +2,9 @@
UÄitaj
Datoteke
- Kreiraj direktorij
+ Nova mapa
Postavke
+ Pošaljite
Općenito
više
Korisnićki raÄuni
@@ -14,14 +15,26 @@
Poveži
UÄitaj
Izlaz
+ Nema niÄega u ovoj mapi. PoÅ¡alji neÅ¡to!
Preuzimanje
+ Podijelite vezu
Da
Ne
+ U redu
Prekini upload
Odustani
Greška
+ Nepoznata pogreška
Izmjena lozinke
+ Naziv mape
Trying to login…
Promjeni ime
Makni
+ Pošaljite
+
+ Korisnićki raÄuni
+ Potrebna autentikacija
+ Pogrešna lozinka
+ Izaberi
+ Sigurnost
diff --git a/res/values-hu-rHU/strings.xml b/res/values-hu-rHU/strings.xml
index 88da10fcdd..f590006047 100644
--- a/res/values-hu-rHU/strings.xml
+++ b/res/values-hu-rHU/strings.xml
@@ -7,33 +7,39 @@
Más alkalmazásokból származó tartalom
Fájlok
Megnyitás a következővel
- Mappa létrehozása
+ Új mappa
BeállÃtások
Részletek
+ Küldjük el
Ãltalános
Több
Fiókok
Fiókok kezelése
Alkalmazás PIN
Védje meg az alkalmazást
- Az azonnali feltöltés engedélyezése
- Az eszköz által készÃtett fényképek azonnali feltöltése
+ Azonnali képfeltöltések
+ Kamera által készÃtette képek azonnali feltöltése
+ Azonnali video feltöltések
+ Kamera által készÃtett videó azonnali feltöltése
Naplózás engedélyezése
Ez használható a problémák naplózásához
Naplózás előzménye
Ez megjelenÃti a rögzitett eseményeket
Elözmények törlése
Súgó
+ Ajánlja egy barátjának
+ Visszajelzés
Impresszum
+ Próbálja ki %1$s-t az okostelefonján!
Szerver állapot ellenörzés
- A kiszolgáló cÃme
+ Kiszolgáló cÃme https://...
Felhasználói név
Jelszó
Új vagy a %1$s területen?
Fájlok
Kapcsolódás
Feltöltés
- Feltöltési mappa választása:
+ Válassz feltöltési mappát:
Nincs ilyen felhasználói fiók
Nem található %1$s fiók ezen a készüléken. Hozzon létre egy fiókot előbb.
BeállÃtás
@@ -42,7 +48,9 @@
Nem jött tartalom. Nincs mit feltölteni.
%1$s nem jogosult a megosztott tartalom elérésére
Feltöltés
- Ebben a mappában nincsenek állományok. A \"Feltöltés\" menüpont segÃtségével tölthet föl fájlokat.
+ Itt nincs semmi. Töltsön fel valamit!
+ Betöltés...
+ Nincs fájl ebben a mappában.
Érintsen meg egy fájlt a további információkért.
Méret:
Tipus:
@@ -51,6 +59,8 @@
Letöltés
File frissÃtése
A feltöltés során az állmányt erre neveztük át: %1$s
+ Megosztás hivatkozással
+ Megosztás visszavonása
Igen
Nem
OK
@@ -73,6 +83,7 @@
%1$s sikeresen fel lett töltve
A feltöltés nem sikerült
%1$s fájl feltöltése sikertelen
+ Feltöltés sikertelen, jelentkezz be újra
Letöltés ...
%1$d%% Letöltés %2$s
A letöltés sikeres
@@ -80,8 +91,10 @@
A letöltés sikertelen
A letöltésből %1$s nem lett befejezve
Még nem töltötte le
+ Letöltés sikertelen, jelentkezz be újra.
Válasszon azonosÃtót
A szinkronizálás sikertelen
+ Szinkronizálás sikertelen, jelentkezz be újra.
%1$s szinkronizációját nem sikerült befejezni
Érvénytelen jelszó a következőhöz %1$s
Ütközések vannak
@@ -89,14 +102,13 @@
A szinkronizálandó fájlokat nem sikerült szinkronizálni
%1$d fájl szinkronizálása nem sikerült (%2$d ütközés)
Néhány helyi fájlt figyelmen kÃvül hagytunk
- %1$d fájlt nem sikerült a %2$s mappából bemásolni
- Az 1.3.16 verzió használatakor azok az állományok, amiket erről az eszközről töltenek fel, a helyi %1$s mappába másolódnak be, hogy elkerülhető legyen az adatveszteség, amikor ugyanazt az állományt több résztvevő is szinkronizál.\n\nEmiatt a változás miatt, az e program korábbi változataival feltöltött állományok a %2$s mappába másolódtak. Sajnos azonban egy a szinkronizáció közben fellépő hiba miatt ez a feladat csak részben valósult meg. Két lehetősége van: vagy úgy dönt, hogy maradjanak a fájl(ok) ahol vannak és akkor törölje a %3$s-re mutató linket, vagy pedig helyezze át az állomány(oka)t a %1$s mappába, és tartsa meg a %4$s-re mutató linket.\n\nAz alábbiakban látható a helyi fájl(ok) listája és a távoli fájl(ok) a %5$s mappában, amihez linkelve voltak.
+ A %1$s mappa már nem létezik
Helyezzük át mindet
Az összes fájlt áthelyeztük
Egyes fájlokat nem sikerült áthelyezni
Helyi: %1$s
Távoli: %1$s
- Nincs elég hely ahhoz, hogy a kiválasztott fájlokat a %1$s mappába másoljuk. Akkor inkább helyezzük át őket oda?
+ Nincs elég hely a kiválasztott fájlok másolására a %1$s könyvtárban. Szeretnéd áthelyezni inkább?
Kérem adja meg az alkalmazás PIN-kódját
Az alkalmazás PIN-kódja
A PIN-t kötelezÅ‘ lesz megadni az alkalmazás minden indÃtásakor
@@ -116,6 +128,7 @@
Nem támogatott média kodek
Media fájl nem olvasható
Médiafájl kódolása nem megfelelő
+ A lejátszás közben időtúllépés történt
A média fájlt nem lehet streamelni.
A média fájlt nem tudja lejátszani a jelenlegi médialejátszó
Biztonsági hiba amikor megpróbálja lejátszani a %1$s
@@ -130,12 +143,15 @@
A kapcsolat létrejött
Kapcsolat tesztelése...
Hibás a kiszolgáló beállÃtása
+ Egy bejelentkezési beállÃtás már létezik ugyanehhez a kiszolgálóhoz és felhasználóhoz
+ A megadott felhasználó nem azonos ezzel a belépési jogosultsággal
Ismeretlen hiba történt!
A kiszolgáló nem található
Kiszolgáló nem található
A kiszolgáló túl sokára válaszolt
Hibás URL
Nem sikerült az SSL kapcsolat felépÃtése
+ Az SSL kiszolgáló tanúsÃtványát nem sikerült ellenÅ‘rizni
Ismeretlen változat a kiszolgálón
A kapcsolat nem hozható létre
Létrejött a titkosÃtott kapcsolat
@@ -143,12 +159,18 @@
Sikertelen azonosÃtás
Hozzáférés megtagadva az azonsÃtást végzÅ‘ szerver által
Nem várt állapot; kérlek, menj a szerver URL-jére újra.
+ A jogosultsága lejárt. Kérjük jelentkezzen be ismét!
Kélek, Ãrd be a jelenlegi jelszavadat
+ Lejárt a munkamenetének érvényessége. Kérjük jelentkezzen be ismét!
+ Kapcsolódás a felhasználóazonosÃtást végzÅ‘ kiszolgálóhoz...
+ A kiszolgáló nem támogatja ezt a felhasználóazonosÃtási módszert
+ %1$s nem támogat több bejelenkezési jogosultságot
+ Nem tudod hitelesÃteni magadat ezen a szerveren
Automatikusan frissÃtse a fájlokat
Ãtnevezés
EltávolÃtás
- Tényleg szeretné törölni ezt: %1$s ?
- Tényleg törölni akarja ezt a tartalmával együtt: %1$s?
+ Tényleg el akarod távolÃtani %1$s?
+ Tényleg el akarod távolÃtani a %1$s és tartalmát?
Csak a helyi példány
Csak a helyi tartalmat
Törlés a szerverről
@@ -160,10 +182,14 @@
Az átnevezés nem sikerült
A távoli fájl nem volt ellenőrizhető
Az állományok már szinkonizálva vannak
- A mappa nem hozható létre
+ A könyvtárt nem lehet létrehozni
+ Nem megendedett karakterek: / \\ < > : \" | ? *
+ A fájl név nem lehet üres
Egy pillanat...
Váratlan hiba; válassza ki a fájlt más programból
Egy fájl sincs kiválasztva
+ Hivatkozás küldése ...
+ Bejelentkezés oAuth2-vel
Kapcsolódás az oAuth2 szerverhez...
A kiszolgálót nem sikerült azonosÃtani
- A kiszolgáló tanúsÃtványa nem megbÃzható
@@ -187,6 +213,8 @@
Eddig a dátumig:
AláÃrás:
Algoritmus:
+ A tanúsÃtvány nem megjelenÃthetÅ‘.
+ - Nincs információ a hibáról
Ez egy helyőrző
helyörző.txt
PNG kép
@@ -194,6 +222,7 @@
2012/05/18 12:23
12:23:45
Képeket csak WiFi kapcsolaton keresztül töltsünk föl
+ Videó feltöltés csak WIFI-vel
/InstantUpload
FrissÃtési ütközés
%s távoli állományt nem szinkronizáltuk a helyi példánnyal. Ha folytatja, akkor a távoli állományt felülÃrjuk.
@@ -201,17 +230,17 @@
FelülÃrás
Ne töltsük föl
Előnézeti kép
- Ez a kép nem jelenik meg
- %1$s-t nem sikerült átmásolni ide: %2$s
- Sikertelen azonnali feltöltés\"
- Sikertelen Azonnali feltöltés
- Összefoglaló az összes sikertelen instant feltöltésről
- Összes kijelölése
- újra az összes kiválasztott
- törölje az összes kiválasztottat a feltöltési sorból
- újra feltölteni a képet:
- További képek betöltése
- nem vagyunk online üzemmódban az azonnali feltöltéshez
- Hibaüzenet
- Kérjük ellenőrizd a szerver konfigurációt, mert lehet, hogy a kvótát túllépted.
+ Ez a kép nem jelenÃthetÅ‘ meg
+ %1$s nem lehet másolni a %2$s helyi könyvtárba
+ Hiba lépett fel a mappa megosztásakor
+ Hiba lépett fel a mappa megosztásának visszavonásakor
+ Küldjük el
+ Link másolása
+ Bemásolva a vágólapra
+
+ Fiókok
+ FelhasználóazonosÃtás szükséges
+ Hibás jelszó
+ Válasszon
+ Biztonság
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 35864beb11..eeb78fe824 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -1,4 +1,5 @@
Ô²Õ¥Õ¼Õ¶Õ¥Õ¬
+
diff --git a/res/values-ia/strings.xml b/res/values-ia/strings.xml
index 5db09aac31..0d79fbdea6 100644
--- a/res/values-ia/strings.xml
+++ b/res/values-ia/strings.xml
@@ -2,7 +2,10 @@
Incargar
Files
+ Nove dossier
Configurationes
+ Invia
+ General
Plus
Adjuta
Nomine de usator
@@ -10,9 +13,18 @@
Files
Connecte
Incargar
+ Nihil hic. Incarga alcun cosa!
Discargar
+ Compartir ligamine
+ Si
+ No
+ Ok
Cancellar
Error
Error Incognite
Cambiar contrasigno
+ Nomine de dossier
+ Invia
+
+ Seliger
diff --git a/res/values-id/strings.xml b/res/values-id/strings.xml
index 3eb4ccb0ea..be93270a06 100644
--- a/res/values-id/strings.xml
+++ b/res/values-id/strings.xml
@@ -1,27 +1,245 @@
+ %1$s Apl Android
+ versi %1$s
+ Segarkan akun
Unggah
+ Konten dari apl lain
Berkas
- pengaturan
- umum
+ Buka dengan
+ Folder baru
+ Pengaturan
+ Rincian
+ Kirim
+ Umum
Lainnya
+ Akun
+ Kelola Akun
+ PIN Apl
+ Lindungi klien Anda
+ Unggah gambar cepat
+ Unggah gambar yang diambil kamera dengan cepat
+ Unggah video cepat
+ Unggah video yang direkam kamera dengan cepat
+ Aktifkan Pencatatan
+ Ini digunakan untuk mencatat masalah
+ Riwayat Catatan
+ Ini menampilkan catatan yang disimpan
+ Riwayat Hapus
Bantuan
- Imprint
- alamat server
- nama pengguna
- kata kunci
+ Rekomendasikan ke teman
+ Umpan balik
+ Jejak
+ Cobalah %1$s pada ponsel cerdas Anda!
+ Saya ingin mengajak Anda untuk menggunakan %1$s di ponsel cerdas Anda!\nUnduh gratis disini: %2$s
+ Periksa Server
+ Alamat server https://…
+ Nama Pengguna
+ Sandi
+ Baru di %1$s?
Berkas
+ Sambungkan
Unggah
+ Pilih folder unggah:
+ Tidak ada akun yang ditemukan
+ Belum ada akun %1$s pada perangkat Anda. Silahkan buat akun terlebih dahulu.
+ Pengaturan
Keluar
- unduh
+ Tidak ada konten untuk diunggah
+ Tidak ada konten yang diterima. Tidak ada yang diunggah
+ %1$s tidak diizinkan mengakses konten berbagi
+ Mengunggah
+ Tidak ada apa-apa di sini. Unggah sesuatu!
+ Memuat...
+ Tidak ada satupun berkas dalam folder ini.
+ Sentuh pada berkas untuk menampilkan informasi tambahan
+ Ukuran:
+ Tipe:
+ Dibuat:
+ Diubah:
+ Unduh
+ Segarkan berkas
+ Berkas diubah namanya menjadi %1$s saat pengunggahan
+ Bagikan tautan
+ Batal bagikan tautan
Ya
Tidak
Oke
+ Batal mengunduh
Batal mengunggah
- batal
- kesalahan
+ Batal
+ Simpan & Keluar
+ Kesalahan
+ Memuat ...
+ Galat tidak diketahui
+ Tentang
Ubah sandi
+ Hapus akun
+ Buat akun
+ Unggah dari...
+ Nama folder
+ Mengungggah...
+ %1$d%% Mengunggah %2$s
+ Berhasil mengunggah
+ %1$s berhasil diunggah
+ Gagal mengunggah
+ Unggah %1$s tidak selesai
+ Mengunduh...
+ %1$d%% Mengunduh %2$s
+ Berhasil mengunduh
+ %1$s berhasil diunduh
+ Gagal Mengunduh
+ Mengunduh %1$s tidak selesai
+ Belum diunduh
+ Gagal mengunduh, Anda perlu masuk kembali
+ Pilih akun
+ Sinkronisasi gagal
+ Sinkronisasi gagal, Anda perlu masuk kembali
+ Sinkronisasi %1$s tidak selesai
+ Sandi salah untuk %1$s
+ Konflik ditemukan
+ %1$d berkas kept-in-sync tidak dapat disinkronkan
+ Berkas kept-in-sync gagal
+ Konten berkas %1$d tidak dapat disinkronasikan (%2$d konflik)
+ Beberapa berkas lokal terlupakan
+ %1$d berkas diluar folder %2$s tidak dapat disalin kedalamnya
+ Sejak versi 1.3.16, berkas-berkas yang diunggah dari piranti ini akan disalin kedalam folder %1$s lokal untuk mencagah kehilangan data ketika berkas tunggal disinkronkan dengan akun lebih dari satu.\n\nAkibat perubahan ini, semua berkas yang diunggah di versi aplikasi sebelumnya disalin kedalam folder %2$s. Namun, sebuah kesalahan mencegah penyelesaian operasi ini saat sinkronisasi berlangsung akun. Anda boleh meninggalkan berkas seperti ini dan menghapus tautan ke %3$s atau memindahkan berkas kedalam folder %1$s dan membiarkan tautan ke %4$s.\n\nYang tampak dibawah adalah berkas lokal, dan berkas remote didalam %5$s yang dihubungkan dengannya.
+ Folder %1$s tidak ada lagi
+ Pindahkan semua
+ Semua berkas sudah dipindahkan
+ Beberapa berkas tidak dapat dipindahkan
+ Lokal: %1$s
+ Jauh: %1$s
+ Ruang tidak cukup untuk menyalin berkas terpilih kedalam folder %1$s. Apakah Anda ingin memindahkannya saja?
+ Silakan masukkan PIN Apl
+ Masukkan PIN Apl
+ PIN akan selalu diminta setiap kali apl dijalankan
+ Silakan masukkan ulang PIN Apl
+ Hapus PIN Apl
+ PIN Apl tidak sama
+ PIN Apl salah
+ PIN Apl dihapus
+ PIN Apl disimpan
+ Pemutar musik %1$s
+ %1$s (dimainkan)
+ %1$s (sedang dimuat)
+ %1$s pemutaran selesai
+ Tidak ditemukan berkas media
+ Tidak ada akun yang diberikan
+ Brkas tidak didalam akun yang sah
+ Kodek media tidak didukung
+ Berkas media tidak dapat dibaca
+ Berkas media tidak di enkode dengan benar
+ Waktu habis saat mencoba untuk main
+ Berkas media tidak bisa dialirkan
+ Berkas media tidak dapat dimainkan dengan pemutar media
+ Kesalahan keamanan saat mencoba memutar %1$s
+ Kesalahan masukkan saat mencoba memutar %1$s
+ Kesalahan tak terduga saat mencoba memutar %1$s
+ Tombol mundur
+ Tombol main dan jeda
+ Tombol maju
+ Mendapatkan otorisasi...
+ Mencoba untuk masuk...
+ Tidak ada koneksi internet
+ Sambungan aman tidak tersedia
+ Sambungan dibuat
+ Pengetesan koneksi ...
+ Konfigurasi server cacat
+ Akun untuk pengguna dan server yang sama sudah ada dalam perangkat
+ Pengguna yang dimasukkan tidak cocok dengan pengguna akun ini
+ Terjadi kesalahan yang tidak diketahui!
+ Tidak menemukan host
+ Instansi server tidak ditemukan
+ Server terlalu lama merespon
+ Format URL salah
+ Menginisiasi SSL gagal
+ Tidak dapat memverifikasi identitas server SSL
+ Versi server tidak dikenal
+ Tidak dapat membuat koneksi
+ Sambungan aman dibuat
+ Nama pengguna dan sandi salah
+ Otorisasi tidak berhasil
+ Akses ditolak oleh server otorisasi
+ Keadaan tak terduga, silahkan masukkan URL server yang lagi
+ Otorisasi Anda telah berakhir. Silakan mengotorisasi lagi
+ Silakan mesukkan sandi saat ini
+ Sesi Anda telah berakhir. Silakan masuk kembali
+ Menyambungkan ke server otentikasi...
+ Server tidak mendukung medote otentikasi ini
+ %1$s tidak mendukung banyak akun
+ Tidak dapat mengotentikasi pada server ini
+ Biarkan berkas tetap terbaru
Ubah nama
- hilangkan
- sembunyikan
+ Hapus
+ Apakah Anda yakin ingin menghapus %1$s?
+ Apakah Anda yakin ingin menghapus %1$s dan isinya?
+ Lokal saja
+ Konten lokal saja
+ Hapus dari server
+ Jarak jauh dan lokal
+ Penghapusan berhasil
+ Penghapusan gagal
+ Masukkan nama baru
+ Salinan lokal tidak dapat diubah nama, coba dengan nama yang berbeda
+ Mengubah nama tidak selesai
+ Berkas jauh tidak dapat diperiksa
+ Isi berkas sudah diselaraskan
+ Folder tidak dapat dibuat
+ Karakter yang dilarang: / \\ < > : \" | ? *
+ Nama berkas tidak boleh kosong
+ Tunggu sebentar
+ Masalah tidak terduga, silahkan pilih berkas dari apl yang berbeda
+ Tidak ada berkas yang terpilih
+ Kirim taukan ke
+ Masuk dengan oAuth2
+ Menyambungkan ke server oAuth2...
+ Identitas situs tidak dapat diverfikasi
+ - Sertifikat server tidak terpercaya
+ - Sertifikat server kadaluarsa
+ - Tanggal sertifikat server yang valid adalah di masa depan
+ - URL tidak cocok dengan nama host dalam sertifikat
+ Apakah Anda percaya dengan sertifikat ini?
+ Sertifikat tidak dapat disimpan
+ Rincian
+ Sembunyikan
+ Diterbitkan untuk:
+ Diterbitkan oleh:
+ Nama panggilan:
+ Organisasi:
+ Unit Organisasi:
+ Negara:
+ Negara bagian:
+ Lokasi:
+ Masa berlaku:
+ Dari:
+ Untuk:
+ Tanda tangan:
+ Algoritma:
+ Sertifikat tidak dapat ditampilkan.
+ - Tidak ada informasi tantang terror
+ Ini adalah placeholder
+ placeholder.txt
+ Gambar PNG
+ 389 KB
+ 18/05/2012 12:23 PM
+ 12:23:45
+ Hanya unggah gambar via WiFi
+ Hanya unggah video via WiFi
+ /UnggahInstan
+ Perbarui benturan
+ Berkas jauh %s tidak sinkron dengan berkas lokal. Melanjutkan akan menggantikan konten berkas di server.
+ Biarkan keduannya
+ Timpa
+ Jangan mengunggah
+ Pratilik gambar
+ Gambar ini tidak dapat ditampilkan
+ Kirim
+ Disalin ke papan klip
+
+ Akun
+ Diperlukan otentikasi
+ Sandi salah
+ Pilih
+ Keamanan
diff --git a/res/values-io/strings.xml b/res/values-io/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-io/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 6a2f9873eb..d6eaedad55 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -3,20 +3,26 @@
Senda inn
Skrár
Stillingar
+ Senda
Meira
Hjálp
- Host nafn netþjóns
Notendanafn
Lykilorð
Skrár
Senda inn
+ Ekkert hér. Settu eitthvað inn!
Niðurhal
Já
Nei
+ Ã lagi
Hætta við innsendingu
Hætta við
Villa
Breyta lykilorði
+ Nafn möppu
Endurskýra
Fjarlægja
+ Senda
+
+ Veldu
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0bd8aa8708..ffa01f314d 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -7,17 +7,20 @@
Contenuti da altre applicazioni
File
Apri con
- Crea cartella
+ Nuova cartella
Impostazioni
Dettagli
+ Invia
Generale
Altro
Account
Gestisci account
PIN App
Proteggi il tuo client l\'applicazione
- Caricamento immediato
+ Caricamenti istantanei delle foto
Carica immediatamente le foto dalla fotocamera
+ Caricamenti istantanei dei video
+ Carica immediatamente i video dalla fotocamera
Abilita registrazione log
Usato per registrare i problemi nei log
Cronologia di registrazione log
@@ -28,16 +31,16 @@
Segnalazioni
Imprint
Prova %1$s sul tuo smartphone!
- Vorrei invitarti ad usare %1$s sul tuo smartphone!âŽ\nScarica qui: %2$s
+ Vorrei invitarti a usare %1$s sul tuo smartphone!\nScarica qui: %2$s
Verifica server
- Indirizzo del server
+ Indirizzo server https://...
Nome utente
Password
Prima volta su %1$s?
File
Connetti
Carica
- Scegli la cartella di caricamento:
+ Scegli la cartella da caricare:
Nessun account trovato
Non ci sono account %1$s sul tuo dispositivo. Configura prima un account.
Configurazione
@@ -46,7 +49,9 @@
Non è stato ricevuto alcun contenuto. Niente da caricare.
%1$s non è abilitato ad accedere al contenuto condiviso
Caricamento in corso
- Non ci sono file in questa cartella.\nNuovi file possono essere aggiunti con l\'opzione di menu \"Carica\".
+ Non c\'è niente qui. Carica qualcosa!
+ Caricamento in corso...
+ Non ci sono file in questa cartella.
Tocca un file per visualizzare informazioni aggiuntive.
Dimensione:
Tipo:
@@ -55,6 +60,8 @@
Scarica
Aggiorna file
Il file è stato rinominato in %1$s durante il caricamento
+ Condividi collegamento
+ Rimuovi condivisione collegamento
Sì
No
OK
@@ -70,13 +77,14 @@
Elimina account
Crea account
Carica file da...
- Nome cartella
+ Nome della cartella
Caricamento in corso...
%1$d%% Caricamento di %2$s
Caricamento effettuato
%1$s è stato caricato correttamente
Caricamento non riuscito
Il caricamento di %1$s non può essere completato
+ Caricamento non riuscito, devi ripetere l\'accesso
Scaricamento in corso...
%1$d%% Scaricamento di %2$s
Scaricamento effettuato
@@ -84,8 +92,10 @@
Scaricamento non riuscito
Scaricamento di %1$s non è stato completato
Non ancora scaricato
+ Scaricamento non riuscito, devi ripetere l\'accesso
Scegli account
Sincronizzazione non riuscita
+ Sincronizzazione non riuscita, devi ripetere l\'accesso
La sincronizzazione di %1$s non può essere completata
Password non valida per %1$s
Conflitti rilevati
@@ -101,7 +111,7 @@
Alcuni file non possono essere spostati
Locale: %1$s
Remoto %1$s
- Non c\'è spazio sufficiente per copiare i file selezionati nella cartella %1$s. Vuoi invece spostarli nella cartella?
+ Non c\'è spazio sufficiente per copiare i file selezionati nella cartella %1$s. Vuoi invece spostarli?
Inserisci il PIN dell\'applicazione
Inserisci il PIN di l\'applicazione
Il PIN sarà richiesto ad ogni avvio dell\'applicazione
@@ -130,6 +140,7 @@
Pulsante Riavvolgi
Pulsante Riproduci o pausa
Pulsante Avanti veloce
+ Autorizzazione in corso...
Tentativo di accesso in corso...
Nessuna connessione di rete
Connessione sicura disponibile.
@@ -158,11 +169,14 @@
Connessione al server di autenticazione in corso...
Il server non supporta questo metodo di autenticazione
%1$s non supporta account multipli
+ Il tuo server non ha restituito un id utente corretto, contatta un amministratore
+
+ Impossibile eseguire l\'autenticazione su questo server
Tieni aggiornato il file
Rinomina
Rimuovi
Vuoi davvero rimuovere %1$s?
- Vuoi davvero rimuovere %1$s ed i suoi contenuti?
+ Vuoi davvero rimuovere %1$s e il suo contenuto?
Solo localmente
Solo contenuti locali
Rimuovi dal server
@@ -175,9 +189,12 @@
Il file remoto non può essere controllato
Contenuti del file già sincronizzati
La cartella non può essere creata
+ Caratteri proibiti: / \\ < > : \" | ? *
+ Il nome del file non può essere vuoto
Attendi
Problema inatteso; prova un\'altra applicazione per selezionare il file
Non è stato selezionato alcun file
+ Invia collegamento a...
Accesso con oAuth2.
Connessione al server oAuth2 in corso...
L\'identità del sito non può essere verificata
@@ -202,6 +219,8 @@
A:
Firma:
Algoritmo:
+ Il certificato non può essere mostrato.
+ - Nessuna informazione sull\'errore
Questo è un segnaposto
segnaposto.txt
Immagine PNG
@@ -209,6 +228,7 @@
2012/05/18 12:23 PM
12:23:45
Carica le immagini solo via WiFi
+ Carica i video solo tramite WiFi
/InstantUpload
Conflitto di aggiornamento
Il file remoto %s non è sincronizzato con il file locale. Se continui, il contenuto del file sarà sostituito sul server.
@@ -218,15 +238,47 @@
Anteprima dell\'immagine
Questa immagine non può essere mostrata
%1$s non può essere copiato nella cartella locale %2$s
- Caricamento istantaneo non riuscito\"
- Caricamenti istantanei non riusciti
- Riepilogo dei caricamenti istantanei non riusciti
- seleziona tutto
- riprova tutti i selezionati
- elimina tutti i selezionati dalla coda di caricamento
- riprova a caricare l\'immagine:
- Carica altre immagini
- non fare niente, non sei collegato per i caricamenti istantanei
- Messaggio d\'errore:
- Controlla la configurazione del server, forse hai superato la tua quota.
+ Percorso di caricamento
+ Spiacenti, la condivisione non è abilitata sul tuo server. Contatta il tuo
+ amministratore.
+ Impossibile condividere. Assicurati che il file esista
+ Si è verificato un errore durante il tentativo di condivisione del file o della cartella
+ Impossibile rimuovere dalla condivisione. Assicurati che il file esista
+ Si è verificato un errore durante il tentativo di rimuovere la condivisione del file o della cartella
+ Invia
+ Copia collegamento
+ Copiato negli appunti
+ Errore grave: impossibile eseguire le operazioni
+ Si è verificato un errore durante la connessione al server.
+ Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata
+ Si è verificato un errore in attesa della risposta del server, l\'operazione non è stata completata
+ L\'operazione non è stata completata, il server non è disponibile
+
+ Non hai i permessi %s
+ per rinominare questo file
+ per eliminare questo file
+ per condividere questo file
+ per rimuovere la condivisione di questo file
+ per creare il file
+ per caricare in questa cartella
+ Il file non è più disponibile sul server
+ Account
+ Aggiungi account
+ La connessione sicura è rediretta su un percorso non sicuro.
+ Registri
+ Invia cronologia
+ Registri applicazione ownCloud Android
+ Caricamento dati...
+ Autenticazione richiesta
+ Password errata
+ Sposta
+ Qui non c\'è niente. Puoi aggiungere una cartella.
+ Scegli
+ Impossibile spostare. Assicurati che il file esista
+ Impossibile spostare una cartella in una cartella inferiore
+ Il file esiste già nella cartella di destinazione
+ Si è verificato un errore durante il tentativo di spostare il file o la cartella
+ per spostare questo file
+ Caricamenti istantanei
+ Protezione
diff --git a/res/values-ja-rJP/strings.xml b/res/values-ja-rJP/strings.xml
index 04961ea663..b6d8ffb4ad 100644
--- a/res/values-ja-rJP/strings.xml
+++ b/res/values-ja-rJP/strings.xml
@@ -1,26 +1,29 @@
- %1$s アンドãƒã‚¤ãƒ‰ã‚¢ãƒ—リ
+ %1$s Androidアプリ
ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %1$s
アカウントをåŒæœŸ
- ファイルをアップãƒãƒ¼ãƒ‰
+ アップãƒãƒ¼ãƒ‰
他アプリã‹ã‚‰ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„
ファイル
次ã§é–‹ã
- ディレクトリを作æˆ
+ æ–°ã—ã„フォルダー
è¨å®š
詳細
+ é€ä¿¡
一般
ã‚‚ã£ã¨è¦‹ã‚‹
アカウント
アカウント管ç†
アプリã®ãƒ‘スワード
クライアントをä¿è·ã™ã‚‹
- 自動アップãƒãƒ¼ãƒ‰ã‚’有効
+ 自動画åƒã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰
カメラã§æ’®å½±ã—ãŸç”»åƒã‚’自動アップãƒãƒ¼ãƒ‰
- 記録を有効化
- ã“ã‚Œã¯å•é¡Œã‚’記録ã™ã‚‹ã®ã«ã¤ã‹ã‚ã‚Œã¾ã™ã€‚
- 記録ã—ã¦ã„ã‚‹å±¥æ´
+ 自動動画アップãƒãƒ¼ãƒ‰
+ カメラã§æ’®å½±ã—ãŸå‹•ç”»ã‚’自動アップãƒãƒ¼ãƒ‰
+ ãƒã‚°ã‚’有効ã«ã™ã‚‹
+ ã“ã‚Œã¯å•é¡Œã‚’ãƒã‚°ã«è¨˜éŒ²ã™ã‚‹ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚
+ ãƒã‚°å±¥æ´
ã“ã‚Œã¯è¨˜éŒ²ã•ã‚ŒãŸãƒã‚°ã‚’表示ã—ã¾ã™
å±¥æ´ã‚’削除
ヘルプ
@@ -28,16 +31,17 @@
フィードãƒãƒƒã‚¯
インプリント
スマートフォン㧠%1$s を試ã—ã¦ãã ã•ã„ï¼
- スマートフォン㧠%1$s を利用ã—ã¦ã¿ã¾ã›ã‚“ã‹ï¼\nã“ã“ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„: %2$s
+ スマートフォン㧠%1$s を利用ã—ã¦ã¿ã¾ã›ã‚“ã‹ï¼
+ã“ã“ã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„: %2$s
サーãƒãƒ¼ã‚’確èªã™ã‚‹
- サーãƒã‚¢ãƒ‰ãƒ¬ã‚¹
+ サーãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹ https://…
ユーザーå
パスワード
%1$sã¯åˆã‚ã¦ã§ã™ã‹ï¼Ÿ
ファイル
接続
アップãƒãƒ¼ãƒ‰
- アップãƒãƒ¼ãƒ‰ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é¸æŠž:
+ アップãƒãƒ¼ãƒ‰ã™ã‚‹ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’é¸æŠž:
アカウントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“
デãƒã‚¤ã‚¹ã«%1$sã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒã‚ã‚Šã¾ã›ã‚“。ã¾ãšæœ€åˆã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’登録ã—ã¦ãã ã•ã„。
è¨å®š
@@ -46,7 +50,9 @@
コンテンツをå—ä¿¡ã—ã¾ã›ã‚“ã§ã—ãŸã€‚アップãƒãƒ¼ãƒ‰ã™ã‚‹ã‚‚ã®ã¯ã‚ã‚Šã¾ã›ã‚“。
%1$sã§å…±æœ‰ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。
アップãƒãƒ¼ãƒ‰ä¸
- ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ã«ã¯ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“。\n\"アップãƒãƒ¼ãƒ‰\" メニューã§æ–°ã—ã„ãƒ•ã‚¡ã‚¤ãƒ«ã‚’è¿½åŠ ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+ ã“ã“ã«ã¯ä½•ã‚‚ã‚ã‚Šã¾ã›ã‚“。何ã‹ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã—ã¦ãã ã•ã„。
+ èªè¾¼ä¸ ...
+ ã“ã®ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã«ã¯ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“。
ファイルをタップã™ã‚‹ã¨è¿½åŠ æƒ…å ±ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚
サイズ:
タイプ:
@@ -55,6 +61,8 @@
ダウンãƒãƒ¼ãƒ‰
ファイルをåŒæœŸ
アップãƒãƒ¼ãƒ‰ä¸ã«ãƒ•ã‚¡ã‚¤ãƒ«åã‚’ %1$s ã«å¤‰æ›´ã—ã¾ã—ãŸ
+ URLã§å…±æœ‰
+ 未共有ã®ãƒªãƒ³ã‚¯
ã¯ã„
ã„ã„ãˆ
OK
@@ -70,13 +78,14 @@
アカウントを削除
アカウントを作æˆ
アップãƒãƒ¼ãƒ‰ …
- ディレクトリå
+ フォルダーå
アップãƒãƒ¼ãƒ‰ä¸...
%1$d%% アップãƒãƒ¼ãƒ‰ä¸ %2$s
アップãƒãƒ¼ãƒ‰å®Œäº†
%1$s ã¯æ£å¸¸ã«ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•ã‚Œã¾ã—ãŸ
アップãƒãƒ¼ãƒ‰ã«å¤±æ•—
%1$s ã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ãŒå®Œäº†ã—ã¾ã›ã‚“ã§ã—ãŸ
+ アップãƒãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸã€‚å†ãƒã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
ダウンãƒãƒ¼ãƒ‰ä¸ ...
%1$d%% ダウンãƒãƒ¼ãƒ‰ä¸ %2$s
ダウンãƒãƒ¼ãƒ‰ã«æˆåŠŸ
@@ -84,24 +93,26 @@
ダウンãƒãƒ¼ãƒ‰ã«å¤±æ•—
%1$s ã®ãƒ€ã‚¦ãƒ³ãƒãƒ¼ãƒ‰ã¯å®Œäº†ã—ã¾ã›ã‚“ã§ã—ãŸ
未ダウンãƒãƒ¼ãƒ‰
+ ダウンãƒãƒ¼ãƒ‰ã«å¤±æ•—ã—ã¾ã—ãŸã€‚å†ãƒã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
アカウントをé¸æŠž
åŒæœŸå¤±æ•—
+ åŒæœŸã«å¤±æ•—ã—ã¾ã—ãŸã€‚å†ãƒã‚°ã‚¤ãƒ³ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
%1$s ã®åŒæœŸãŒå®Œäº†ã—ã¾ã›ã‚“ã§ã—ãŸã€‚
1$sã®ç„¡åŠ¹ãªãƒ‘スワード
競åˆãŒè¦‹ã¤ã‹ã‚Šã¾ã—ãŸ
%1$d åŒæœŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’åŒæœŸã§ãã¾ã›ã‚“ã§ã—ãŸ
ファイルã®åŒæœŸã«å¤±æ•—ã—ã¾ã—ãŸ
%1$d ファイルã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’åŒæœŸã§ãã¾ã›ã‚“ã§ã—ãŸï¼ˆ%2$d ã®ç«¶åˆï¼‰
- ã„ãã¤ã‹ã®ãƒãƒ¼ã‚«ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ãŒå¿˜ã‚Œã‚‰ã‚Œã¦ã„ã¾ã™
- %2$s ディレクトリ内㮠%1$d ファイルã¯ã‚³ãƒ”ーã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ
- \"ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.3.16ã‹ã‚‰ã€ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€å˜ç‹¬ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒè¤‡æ•°ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¨åŒæœŸã•ã‚Œã‚‹æ™‚ã«ãƒ‡ãƒ¼ã‚¿ã®æ失を防ããŸã‚ã€ãƒãƒ¼ã‚«ãƒ«ã®%1$sã®ãƒ•ã‚©ãƒ«ãƒ€ã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚\n\nã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ã“ã®ã‚¢ãƒ—リã®ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•ã‚ŒãŸã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒ%2$s フォルダã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚ãŸã ã—ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆåŒæœŸã®éš›ã«ã€ã‚¨ãƒ©ãƒ¼ãŒã“ã®æ“作ã®å®Œäº†ã‚’阻æ¢ã—ã¾ã—ãŸã€‚ã“ã®ã¾ã¾ãƒ•ã‚¡ã‚¤ãƒ«ã‚’残ã—ã€%3$sã¸ã®ãƒªãƒ³ã‚¯ã‚’削除ã™ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯%1$s ディレクトリã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’移動ã—ã€%4$sã¸ã®ãƒªãƒ³ã‚¯ã‚’ç¶æŒã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n\n以下ã«ãƒãƒ¼ã‚«ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¨ã€ãã‚Œã«ãƒªãƒ³ã‚¯ã—ã¦ã„ãŸ%5$sã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ãŒãƒªã‚¹ãƒˆã•ã‚Œã¦ã„ã¾ã™
- フォルダ %1$s ã¯ã‚‚ã†å˜åœ¨ã—ã¾ã›ã‚“
- å…¨ã¦ç§»å‹•
- å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ç§»å‹•ã•ã‚Œã¾ã—ãŸ
- ã„ãã¤ã‹ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ç§»å‹•å‡ºæ¥ã¾ã›ã‚“ã§ã—ãŸ
+ 一部ã®ãƒãƒ¼ã‚«ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ãŒå¿˜ã‚Œã‚‰ã‚Œã¦ã„ã¾ã™
+ %2$s フォルダー内㮠%1$d ファイルã¯ã‚³ãƒ”ーã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.3.16以é™ã€ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã‹ã‚‰ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€å˜ç‹¬ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒè¤‡æ•°ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¨åŒæœŸã™ã‚‹éš›ã«ãƒ‡ãƒ¼ã‚¿ã®æ失を防ããŸã‚ã€ãƒãƒ¼ã‚«ãƒ«ã®%1$sフォルダーã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚ ã“ã®å¤‰æ›´ã«ã‚ˆã‚Šã€ã“ã®ã‚¢ãƒ—リã®ä»¥å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã•ã‚ŒãŸã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯%2$sフォルダーã«ã‚³ãƒ”ーã•ã‚Œã¾ã™ã€‚ã—ã‹ã—ãªãŒã‚‰ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆåŒæœŸä¸ã«ã¯ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¦ã“ã®æ“作ãŒå®Œäº†ã—ãªã„よã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ファイルをã“ã®ã¾ã¾ã«ã—ã¦%3$sã¸ã®ãƒªãƒ³ã‚¯ã‚’削除ã™ã‚‹ã‹ã€ã‚ã‚‹ã„ã¯%1$sフォルダーã«ãƒ•ã‚¡ã‚¤ãƒ«ã‚’移動ã—ã¦%4$sã¸ã®ãƒªãƒ³ã‚¯ã‚’ç¶æŒã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 以下ã®ãƒªã‚¹ãƒˆã«ã‚ã‚‹ã®ã¯ã€ãƒãƒ¼ã‚«ãƒ«ã®ãƒ•ã‚¡ã‚¤ãƒ«åŠã³ãれらã«ãƒªãƒ³ã‚¯ã—ã¦ã„ã‚‹ %5$s内ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã§ã™ã€‚
+ フォルダー %1$s ã¯ã‚‚ã†å˜åœ¨ã—ã¾ã›ã‚“
+ ã™ã¹ã¦ç§»å‹•
+ ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’移動ã—ã¾ã—ãŸ
+ 一部ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ç§»å‹•ã§ãã¾ã›ã‚“ã§ã—ãŸ
ãƒãƒ¼ã‚«ãƒ«: %1$s
リモート: %1$s
- %1$s フォルダã«é¸æŠžã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’コピーã™ã‚‹ã®ã«å分ãªã‚¹ãƒšãƒ¼ã‚¹ãŒã‚ã‚Šã¾ã›ã‚“。コピーã™ã‚‹ä»£ã‚ã‚Šã«ã€ãれらを移動ã•ã›ã¾ã™ã‹ï¼Ÿ
+ å分ãªã‚¹ãƒšãƒ¼ã‚¹ãŒãªã„ãŸã‚ã€é¸æŠžã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’ %1$s フォルダーã«ã‚³ãƒ”ーã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。コピーã™ã‚‹ä»£ã‚ã‚Šã«ã€ãれらを移動ã•ã›ã¾ã™ã‹ï¼Ÿ
アプリã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„
アプリã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„
アプリ開始時ã«æ¯Žå›žPINãŒè¦æ±‚ã•ã‚Œã¾ã™ã€‚
@@ -123,29 +134,30 @@
メディアファイルãŒæ£ç¢ºã«ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã•ã‚Œã¦ã„ã¾ã›ã‚“
å†ç”Ÿä¸ã«ã‚¿ã‚¤ãƒ アウトãŒç™ºç”Ÿã—ã¾ã—ãŸ
メディアファイルをストリーミングã§ãã¾ã›ã‚“
- メディアファイルをStock Media Playerã§ãƒ—レイ出æ¥ã¾ã›ã‚“
- プレイã«éš›ã—ã¦ã‚»ã‚ュリティエラー %1$s
- プレイã«éš›ã—ã¦å…¥åŠ›ã‚¨ãƒ©ãƒ¼ %1$s
- プレイã«éš›ã—ã¦äºˆæœŸã—ãªã„エラー %1$s
+ メディアファイルをStock Media Playerã§å†ç”Ÿã§ãã¾ã›ã‚“
+ å†ç”Ÿæ™‚ã«ã‚»ã‚ュリティエラー %1$s
+ å†ç”Ÿæ™‚ã«å…¥åŠ›ã‚¨ãƒ©ãƒ¼ %1$s
+ å†ç”Ÿæ™‚ã«äºˆæœŸã—ãªã„エラー %1$s
å·»ã戻ã—ボタン
- プレイ/ãƒãƒ¼ã‚ºãƒœã‚¿ãƒ³
+ å†ç”Ÿ/一時åœæ¢ãƒœã‚¿ãƒ³
æ—©é€ã‚Šãƒœã‚¿ãƒ³
+ èªè¨¼ä¸...
ãƒã‚°ã‚¤ãƒ³ä¸...
ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã«æŽ¥ç¶šã•ã‚Œã¦ã„ã¾ã›ã‚“
æš—å·åŒ–通信ãŒåˆ©ç”¨ã§ãã¾ã›ã‚“。
接続ãŒç¢ºç«‹ã—ã¾ã—ãŸ
接続をテストä¸...
- サーãƒãƒ¼ã®é–“é•ã£ãŸè¨å®š
- åŒã˜ãƒ¦ãƒ¼ã‚¶ã¨ã‚µãƒ¼ãƒã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒãƒ‡ãƒã‚¤ã‚¹ä¸Šã«ã™ã§ã«å˜åœ¨ã—ã¾ã™
- 入力ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ã¯ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒ¦ãƒ¼ã‚¶ã¨ä¸€è‡´ã—ã¾ã›ã‚“
+ サーãƒãƒ¼è¨å®šãŒé–“é•ã£ã¦ã„ã¾ã™
+ åŒã˜ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã‚µãƒ¼ãƒãƒ¼ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒãƒ‡ãƒã‚¤ã‚¹ä¸Šã«ã™ã§ã«å˜åœ¨ã—ã¾ã™
+ 入力ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ä¸€è‡´ã—ã¾ã›ã‚“
ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ã«ç™ºç”Ÿã—ã¾ã—ãŸ
ホストãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
- ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ
- サーãƒãƒ¼ã‹ã‚‰ã®åå¿œãŒã‚ã‚Šã¾ã›ã‚“。
+ サーãƒãƒ¼ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“
+ サーãƒãƒ¼ã‹ã‚‰ã®åå¿œãŒã‚ã‚Šã¾ã›ã‚“
ä¸æ˜ŽãªURLå½¢å¼
SSLã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸ
- SSL サーãƒè˜åˆ¥åを確èªã§ãã¾ã›ã‚“ã§ã—ãŸ
- èªè˜å‡ºæ¥ãªã„サーãƒã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™
+ SSLサーãƒãƒ¼è˜åˆ¥åを確èªã§ãã¾ã›ã‚“ã§ã—ãŸ
+ èªè˜ã§ããªã„サーãƒãƒ¼ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã™
接続を確立ã§ãã¾ã›ã‚“ã§ã—ãŸ
æš—å·åŒ–通信を確立ã—ã¾ã—ãŸ
é–“é•ã£ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚‚ã—ãã¯ãƒ‘スワード
@@ -155,17 +167,20 @@
èªè¨¼æƒ…å ±ã¯æœ‰åŠ¹æœŸé™åˆ‡ã‚Œã§ã™ã€‚å†åº¦èªè¨¼ã‚’è¡Œã£ã¦ãã ã•ã„。
ç¾åœ¨ã®ãƒ‘スワードを入力ã—ã¦ãã ã•ã„
セッションã®æœ‰åŠ¹æœŸé™åˆ‡ã‚Œã§ã™ã€‚å†åº¦æŽ¥ç¶šã—ã¦ãã ã•ã„。
- èªè¨¼ã‚µãƒ¼ãƒã«æŽ¥ç¶šä¸ ...
- サーãƒã¯ã“ã®èªè¨¼æ–¹å¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“
+ èªè¨¼ã‚µãƒ¼ãƒãƒ¼ã«æŽ¥ç¶šä¸ ...
+ サーãƒãƒ¼ã¯ã“ã®èªè¨¼æ–¹å¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“
%1$s ã¯è¤‡æ•°ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“
+ サーãƒãƒ¼ãŒæ£ã—ã„ユーザーIDã‚’è¿”ã—ã¾ã›ã‚“ã§ã—ãŸã€‚管ç†è€…ã«ã”連絡ãã ã•ã„。
+
+ ã“ã®ã‚µãƒ¼ãƒãƒ¼ã«å¯¾ã—ã¦èªè¨¼ã§ãã¾ã›ã‚“
ファイルを最新ã«ä¿ã¤
åå‰ã‚’変更
削除
- 本当㫠%1$s を削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ
+ 本当㫠%1$s を削除ã—ã¾ã™ã‹ï¼Ÿ
本当㫠%1$s ãŠã‚ˆã³ãã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を削除ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ
ãƒãƒ¼ã‚«ãƒ«ã®ã¿
ãƒãƒ¼ã‚«ãƒ«ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®ã¿
- サーãƒã‹ã‚‰å‰Šé™¤
+ サーãƒãƒ¼ã‹ã‚‰å‰Šé™¤
リモートã¨ãƒãƒ¼ã‚«ãƒ«ã®ä¸¡æ–¹
削除ã«æˆåŠŸã—ã¾ã—ãŸ
削除を完了ã§ãã¾ã›ã‚“ã§ã—ãŸ
@@ -174,16 +189,19 @@
åå‰ã®å¤‰æ›´ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ
リモートファイルをãƒã‚§ãƒƒã‚¯ã§ãã¾ã›ã‚“ã§ã—ãŸ
ファイルコンテンツã¯ã™ã§ã«åŒæœŸã•ã‚Œã¦ã„ã¾ã™
- ディレクトリを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ
+ フォルダーを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ
+ 使用ã§ããªã„æ–‡å—: / \\ < > : \" | ? *
+ ファイルåを空ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
ã—ã°ã‚‰ããŠå¾…ã¡ãã ã•ã„
予期ã›ã¬å•é¡Œï¼›ä»–ã®ã‚¢ãƒ—リã§ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠžã—ã¦ã¿ã¦ãã ã•ã„。
ファイルã¯é¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“
- oAuth2 ã§ãƒã‚°ã‚¤ãƒ³
+ リンクをé€ä¿¡â€¦
+ oAuth2ã§ãƒã‚°ã‚¤ãƒ³
oAuth2サーãƒãƒ¼ã«æŽ¥ç¶šä¸...
サイトã®è˜åˆ¥åを確èªã§ãã¾ã›ã‚“ã§ã—ãŸ
- - サーãƒè¨¼æ˜Žæ›¸ã¯ä¿¡é ¼ã•ã‚Œã¦ã„ã¾ã›ã‚“
- - サーãƒè¨¼æ˜Žæ›¸ã¯æœ‰åŠ¹æœŸé™åˆ‡ã‚Œã§ã™
- - サーãƒè¨¼æ˜Žæ›¸ã¯è‹¥ã™ãŽã¾ã™
+ - サーãƒãƒ¼è¨¼æ˜Žæ›¸ã¯ä¿¡é ¼ã•ã‚Œã¦ã„ã¾ã›ã‚“
+ - サーãƒãƒ¼è¨¼æ˜Žæ›¸ã¯æœ‰åŠ¹æœŸé™åˆ‡ã‚Œã§ã™
+ - サーãƒãƒ¼è¨¼æ˜Žæ›¸ã®æœ‰åŠ¹æœŸé™ã¯æœªæ¥ã®ã‚‚ã®ã§ã™
- URLã¯è¨¼æ˜Žæ›¸å†…ã®ãƒ›ã‚¹ãƒˆåã¨ä¸€è‡´ã—ã¾ã›ã‚“
ã“ã®è¨¼æ˜Žæ›¸ã‚’ä¿¡é ¼ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ
証明書ã¯ä¿å˜ã§ãã¾ã›ã‚“ã§ã—ãŸ
@@ -202,6 +220,8 @@
å…ˆ:
ç½²å:
アルゴリズム:
+ 証明書ãŒè¡¨ç¤ºã§ãã¾ã›ã‚“。
+ -エラーã«ã¤ã„ã¦ã®è©³ç´°æƒ…å ±ã¯ã‚ã‚Šã¾ã›ã‚“
ã“ã‚Œã¯ãƒ—レースホルダã§ã™
placeholder.txt
PNG ç”»åƒ
@@ -209,24 +229,54 @@
2012/05/18 12:23 PM
12:23:45
WiFi経由ã§ã®ã¿å†™çœŸã‚’アップãƒãƒ¼ãƒ‰
+ WiFi経由ã§ã®ã¿å‹•ç”»ã‚’アップãƒãƒ¼ãƒ‰
/InstantUpload
- æ›´æ–°ã®ç«¶åˆ
- リモートファイル %s ã¯ãƒãƒ¼ã‚«ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã¨åŒæœŸã—ã¦ã„ã¾ã›ã‚“。続行ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒä¸Šã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ãæ›ãˆã¾ã™ã€‚
+ æ›´æ–°ãŒç«¶åˆ
+ リモートファイル %s ã¯ãƒãƒ¼ã‚«ãƒ«ãƒ•ã‚¡ã‚¤ãƒ«ã¨åŒæœŸã—ã¦ã„ã¾ã›ã‚“。続行ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒãƒ¼ä¸Šã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ç½®ãæ›ãˆã¾ã™ã€‚
両方をä¿æŒ
上書ã
アップãƒãƒ¼ãƒ‰ã—ãªã„
イメージプレビュー
ã“ã®ç”»åƒã¯è¡¨ç¤ºã§ãã¾ã›ã‚“
- %1$s 㯠%2$s ãƒãƒ¼ã‚«ãƒ«ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«ã‚³ãƒ”ー出æ¥ã¾ã›ã‚“ã§ã—ãŸ
- インスタントアップãƒãƒ¼ãƒ‰ã«å¤±æ•—ã€
- インスタントアップãƒãƒ¼ãƒ‰ã«å¤±æ•—
- å…¨ã¦ã®å¤±æ•—ã—ãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã®è¦ç´„
- ã™ã¹ã¦é¸æŠž
- ã™ã¹ã¦ã®é¸æŠžã‚’å†è©¦è¡Œ
- アップãƒãƒ¼ãƒ‰ã‚ューã‹ã‚‰ã™ã¹ã¦ã®é¸æŠžã‚’削除
- ç”»åƒã®ã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã‚’å†è©¦è¡Œ:
- æ›´ã«ç”»åƒã‚’èªã¿è¾¼ã‚€
- オンラインã§ãªãã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ãƒˆã‚¢ãƒƒãƒ—ãƒãƒ¼ãƒ‰ã®ãŸã‚ã«ä½•ã‚‚ã—ã¾ã›ã‚“
- 失敗メッセージ:
- サーãƒãƒ¼ã®è¨å®šã‚’確èªã—ã¦ãã ã•ã„。許容を超éŽã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚
+ %1$s ã¯ã€ãƒãƒ¼ã‚«ãƒ«ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ %2$s ã«ã‚³ãƒ”ーã§ãã¾ã›ã‚“ã§ã—ãŸã€‚
+ 申ã—訳ã”ã–ã„ã¾ã›ã‚“。共有ãŒã‚µãƒ¼ãƒãƒ¼ä¸Šã§æœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã›ã‚“。 管ç†è€…ã«
+ ã”連絡ãã ã•ã„。
+ 共有ã§ãã¾ã›ã‚“。ファイルãŒã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。
+ ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¾ãŸã¯ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’共有ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ
+ 共有を解除ã§ãã¾ã›ã‚“。ファイルãŒã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。
+ ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¾ãŸã¯ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã®å…±æœ‰ã‚’解除ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ
+ é€ä¿¡
+ リンクをコピー
+ クリップボードã«ã‚³ãƒ”ー
+ 致命的ãªã‚¨ãƒ©ãƒ¼ï¼šæ“作を実行ã§ãã¾ã›ã‚“
+ サーãƒãƒ¼ã¸ã®æŽ¥ç¶šä¸ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚
+ サーãƒãƒ¼ã‹ã‚‰ã®å¿œç”ã‚’å¾…ã£ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚æ“作を完了ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ サーãƒãƒ¼ã‹ã‚‰ã®å¿œç”ã‚’å¾…ã£ã¦ã„ã‚‹é–“ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚æ“作を完了ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。
+ æ“作を完了ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。サーãƒãƒ¼ãŒåˆ©ç”¨ã§ãã¾ã›ã‚“。
+
+ æ¨©é™ %s ãŒã‚ã‚Šã¾ã›ã‚“
+ ファイルåã®å¤‰æ›´
+ ファイルを削除
+ ファイルを共有
+ ファイルã®å…±æœ‰ã‚’解除
+ ファイルを作æˆ
+ フォルダーをアップãƒãƒ¼ãƒ‰
+ ファイルã¯ã‚µãƒ¼ãƒãƒ¼ä¸Šã§åˆ©ç”¨ã§ãã¾ã›ã‚“
+ アカウント
+ アカウントを追åŠ
+ ãƒã‚°
+ ãƒã‚°ã‚’é€ä¿¡
+ ownCloud Android アプリãƒã‚°
+ èªè¾¼ä¸ ...
+ èªè¨¼ã‚’å¿…è¦ã¨ã™ã‚‹
+ 無効ãªãƒ‘スワード
+ 移動
+ ファイルãŒæœ‰ã‚Šã¾ã›ã‚“ã€‚ãƒ•ã‚©ãƒ«ãƒ€ã‚’è¿½åŠ ã—ã¦ãã ã•ã„。
+ é¸æŠž
+ 移動ã§ãã¾ã›ã‚“。ファイルãŒã‚ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。
+ フォルダをåフォルダã¸ç§»å‹•ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。
+ ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€å®›å…ˆãƒ•ã‚©ãƒ«ãƒ€ã«æ—¢ã«å˜åœ¨ã—ã¦ã„ã¾ã™ã€‚
+ ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¾ãŸã¯ãƒ•ã‚©ãƒ«ãƒ€ãƒ¼ã‚’移動ã™ã‚‹éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ
+ ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’移動
+ ã‚»ã‚ュリティ
diff --git a/res/values-jv/strings.xml b/res/values-jv/strings.xml
new file mode 100644
index 0000000000..084a4e3ef0
--- /dev/null
+++ b/res/values-jv/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Njipuk
+
+
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 56a17fa58b..43b1a456c2 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -3,20 +3,18 @@
áƒáƒ¢áƒ•áƒ˜áƒ თვáƒ
კáƒáƒœáƒ¢áƒ”ნტი სხვრáƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ¡áƒ”ბიდáƒáƒœ
ფáƒáƒ˜áƒšáƒ”ბი
- დირექტáƒáƒ იის შექმნáƒ
+ áƒáƒ®áƒáƒšáƒ˜ ფáƒáƒšáƒ“ერი
პáƒáƒ áƒáƒ›áƒ”ტრები
+ გáƒáƒ’ზáƒáƒ•áƒœáƒ
ზáƒáƒ’áƒáƒ“ი
უფრრმეტი
áƒáƒœáƒ’áƒáƒ იში
áƒáƒœáƒ’áƒáƒ იშების მენეჯმენტი
áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ PIN–ი
თქვენი კლიენტის დáƒáƒªáƒ•áƒ
- ჩáƒáƒ თე ეგრევე áƒáƒ¢áƒ•áƒ˜áƒ თვის ფუნქციáƒ
- კáƒáƒ›áƒ”რით გáƒáƒ“áƒáƒ¦áƒ”ბული ფáƒáƒ¢áƒáƒ”ბის ეგრევე áƒáƒ¢áƒ•áƒ˜áƒ თვáƒ
დáƒáƒ®áƒ›áƒáƒ ებáƒ
უკუკáƒáƒ•áƒ¨áƒ˜áƒ ი
ბეáƒáƒ”დი
- სერვერის მისáƒáƒ›áƒáƒ თი
მáƒáƒ›áƒ®áƒ›áƒáƒ ებლის სáƒáƒ®áƒ”ლი
პáƒáƒ áƒáƒšáƒ˜
ფáƒáƒ˜áƒšáƒ”ბი
@@ -30,7 +28,7 @@
კáƒáƒœáƒ¢áƒ”ნტი áƒáƒ იქნრმიღებული. áƒáƒ áƒáƒ¤áƒ”რირáƒáƒ¡áƒáƒ¢áƒ•áƒ˜áƒ თáƒáƒ“.
%1$s–ი áƒáƒ დáƒáƒ˜áƒ¨áƒ•áƒ”ბრგáƒáƒ–იáƒáƒ ებული კáƒáƒœáƒ¢áƒ”ნტის სáƒáƒœáƒáƒ®áƒáƒ•áƒáƒ“
მიმდინáƒáƒ ეáƒáƒ‘ს áƒáƒ¢áƒ•áƒ˜áƒ თვáƒ
- áƒáƒ› ფáƒáƒšáƒ“ერში ფáƒáƒ˜áƒšáƒ”ბი áƒáƒ áƒáƒ ის.âŽ\náƒáƒ®áƒáƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბი შეიძლებრდáƒáƒ”მáƒáƒ¢áƒáƒ¡ \"áƒáƒ¢áƒ•áƒ˜áƒ თვáƒ\" მენიუს áƒáƒ¤áƒªáƒ˜áƒ˜áƒ—.
+ áƒáƒ¥ áƒáƒ áƒáƒ¤áƒ”რი áƒáƒ áƒáƒ ის. áƒáƒ¢áƒ•áƒ˜áƒ თე რáƒáƒ›áƒ”!
დáƒáƒáƒáƒ˜áƒ ეთ ფáƒáƒ˜áƒšáƒ¡ დáƒáƒ›áƒáƒ¢áƒ”ბითი ინფáƒáƒ მáƒáƒªáƒ˜áƒ˜áƒ¡ გáƒáƒ›áƒáƒ¡áƒáƒ©áƒ”ნáƒáƒ“.
ზáƒáƒ›áƒ:
ტიპი:
@@ -52,7 +50,7 @@
áƒáƒœáƒ’áƒáƒ იშის წáƒáƒ¨áƒšáƒ
áƒáƒœáƒ’áƒáƒ იშის შექმნáƒ
áƒáƒ¢áƒ•áƒ˜áƒ თე áƒáƒ¥áƒ”დáƒáƒœ...
- დირექტáƒáƒ იის სáƒáƒ®áƒ”ლი
+ ფáƒáƒšáƒ“ერის სáƒáƒ®áƒ”ლი
მიმდინáƒáƒ ეáƒáƒ‘ს áƒáƒ¢áƒ•áƒ˜áƒ თვáƒ...
%1$d%% მიმდინáƒáƒ ეáƒáƒ‘ს áƒáƒ¢áƒ•áƒ˜áƒ თვრ%2$s
áƒáƒ¢áƒ•áƒ˜áƒ თვრგáƒáƒœáƒ®áƒáƒ ციელდáƒ
@@ -73,13 +71,11 @@
Kept-in-sync ფáƒáƒ˜áƒšáƒ”ბი ვერმáƒáƒ®áƒ”რხდáƒ
%1$d ფáƒáƒ˜áƒšáƒ”ბის კáƒáƒœáƒ¢áƒ”ნტის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ ვერმáƒáƒ®áƒ”რხდრ(%2$d კáƒáƒœáƒ¤áƒšáƒ˜áƒ¥áƒ¢áƒ˜)
რáƒáƒ›áƒáƒ“ენიმე ლáƒáƒ™áƒáƒšáƒ£áƒ ი ფáƒáƒ˜áƒšáƒ˜ დáƒáƒ™áƒáƒ გულიáƒ
- %1$d ფáƒáƒ˜áƒšáƒ”ბი áƒáƒ áƒáƒ ის %2$s დირექტáƒáƒ იáƒáƒ¨áƒ˜ დრვერდáƒáƒ™áƒáƒžáƒ˜áƒ დებáƒ
გáƒáƒ“áƒáƒ˜áƒ¢áƒáƒœáƒ” ყველáƒ
ყველრფáƒáƒ˜áƒšáƒ”ბი გáƒáƒ“áƒáƒ¢áƒáƒœáƒ˜áƒšáƒ˜áƒ
რáƒáƒ›áƒáƒ“ენიმე ფáƒáƒ˜áƒšáƒ˜áƒ¡ გáƒáƒ“áƒáƒ¢áƒáƒœáƒ ვერმáƒáƒ®áƒ”რხდáƒ
ლáƒáƒ™áƒáƒšáƒ£áƒ ი: %1$s
დáƒáƒ¨áƒáƒ ებული: %1$s
- áƒáƒ“გილი áƒáƒ áƒáƒ ის მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბის დáƒáƒ¡áƒáƒ™áƒáƒžáƒ˜áƒ ებლáƒáƒ“ %1$s ფáƒáƒšáƒ“ერში. გინდáƒáƒ— თქვენ გáƒáƒ“áƒáƒ˜áƒ¢áƒáƒœáƒáƒ— ისინი áƒáƒ›áƒ˜áƒ¡ მáƒáƒ’ივრáƒáƒ“?
გთხáƒáƒ•áƒ—, ჩáƒáƒ¡áƒ•áƒáƒ— თქვენი áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ PIN–ი
შეიყვáƒáƒœáƒ”თ თქვენი áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ PIN–ი
PIN–ი მáƒáƒ—ხáƒáƒ•áƒœáƒ˜áƒšáƒ˜ იქნებრáƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ¡ ყáƒáƒ•áƒ”ლ ჩáƒáƒ თვáƒáƒ–ე
@@ -105,8 +101,6 @@
áƒáƒ გáƒáƒœáƒáƒáƒ®áƒšáƒ ფáƒáƒ˜áƒšáƒ˜
გáƒáƒ“áƒáƒ ქმევáƒ
წáƒáƒ¨áƒšáƒ
- ნáƒáƒ›áƒ“ვილáƒáƒ“ გინდáƒáƒ— წáƒáƒ¨áƒáƒšáƒáƒ— %1$s ?
- თქვენ áƒáƒ£áƒªáƒ˜áƒšáƒ”ბლáƒáƒ“ გინდáƒáƒ— %1$s–ის წáƒáƒ¨áƒšáƒ თáƒáƒ•áƒ˜áƒ¡áƒ˜ კáƒáƒœáƒ¢áƒ”ნტით?
მხáƒáƒšáƒáƒ“ ლáƒáƒ™áƒáƒšáƒ£áƒ ი
მხáƒáƒšáƒáƒ“ ლáƒáƒ™áƒáƒšáƒ£áƒ ი კáƒáƒœáƒ¢áƒ”ნტი
სერვერიდáƒáƒœ წáƒáƒ¨áƒšáƒ
@@ -118,7 +112,6 @@
გáƒáƒ“áƒáƒ ქმევრვერდáƒáƒ¡áƒ ულდრწáƒáƒ მáƒáƒ¢áƒ”ბით
დáƒáƒ¨áƒáƒ ებული ფáƒáƒ˜áƒšáƒ˜áƒ¡ შემáƒáƒ¬áƒ›áƒ”ბრვერმáƒáƒ®áƒ”რხდáƒ
ფáƒáƒ˜áƒšáƒ”ბის კáƒáƒœáƒ¢áƒ”ნტის სინქრáƒáƒœáƒ˜áƒ–áƒáƒªáƒ˜áƒ ვერმáƒáƒ®áƒ”რხდáƒ
- დირექტáƒáƒ ირვერშეიქმნáƒ
გთხáƒáƒ•áƒ— მáƒáƒ˜áƒ—მინáƒáƒ—
მáƒáƒ£áƒšáƒáƒ“ნელი პრáƒáƒ‘ლემáƒ: გთხáƒáƒ•áƒ— áƒáƒ˜áƒ ჩიáƒáƒ— ფáƒáƒ˜áƒšáƒ˜ სხვáƒáƒ“áƒáƒ¡áƒ®áƒ•áƒ áƒáƒžáƒšáƒ˜áƒ™áƒáƒªáƒ˜áƒ˜áƒ“áƒáƒœ
ფáƒáƒ˜áƒšáƒ˜ áƒáƒ ყáƒáƒ¤áƒ˜áƒšáƒ მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜
@@ -151,5 +144,10 @@
დáƒáƒ¢áƒáƒ•áƒ” áƒáƒ ივე
გáƒáƒ“áƒáƒáƒ¬áƒ”რე
áƒáƒ áƒáƒ¢áƒ•áƒ˜áƒ თáƒ
- %1$s–ის კáƒáƒžáƒ˜áƒ ებრვერმáƒáƒ®áƒ”რხდრ%2$s ლáƒáƒ™áƒáƒšáƒ£áƒ დირექტáƒáƒ იáƒáƒ¨áƒ˜
+ გáƒáƒ’ზáƒáƒ•áƒœáƒ
+ კáƒáƒžáƒ˜áƒ ებულირკლიპბáƒáƒ დში
+
+ áƒáƒœáƒ’áƒáƒ იში
+ áƒáƒ ჩევáƒ
+ უსáƒáƒ¤áƒ თხáƒáƒ”ბáƒ
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index c757504ac2..752985c327 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -1,2 +1,87 @@
-
+
+ ផ្ទុក​ឡើង
+ ឯកសារ
+ ážážâ€‹ážáŸ’មី
+ ការកំណážáŸ‹
+ áž–áŸážáŸŒáž˜áž¶áž“​លម្អិáž
+ ផ្ញើ
+ ទូទៅ
+ ច្រើន​ទៀáž
+ គណនី
+ គ្រប់គ្រង​គណនី
+ ជំនួយ
+ ឈ្មោះ​អ្នកប្រើ
+ ពាក្យសម្ងាážáŸ‹
+ ឯកសារ
+ ភ្ជាប់
+ ផ្ទុក​ឡើង
+ រកមិនឃើញ​គណនី
+ គ្មាន %1$s គណនី​លើម៉ាស៊ីន​របស់អ្នកទáŸáŸ” សូមរៀបចំគណនីមួយជាមុនសិន។
+ ដំឡើង
+ ចាក់ចáŸáž‰
+ កំពុង​ផ្ទុក​ឡើង
+ គ្មាន​អ្វី​នៅ​ទីនáŸáŸ‡â€‹áž‘áŸáŸ” ផ្ទុក​ឡើង​អ្វី​មួយ!
+ ចុចមួយ​លើឯកសារ ដើម្បី​បង្ហាញ​ពáŸážáŸŒáž˜áž¶áž“​បន្ážáŸ‚ម។
+ ទំហំ៖
+ ប្រភáŸáž‘៖
+ បាន​បង្កើážáŸ–
+ បាន​កែ​សម្រួល៖
+ ទាញយក
+ ព្រម
+ áž‘áŸ
+ OK
+ បោះបង់ការទាញយក
+ បោះបង់​ការ​ផ្ទុកឡើង
+ លើកលែង
+ រក្សាទុក & ចាកចáŸáž‰
+ កំហុស
+ កំពុងដំណើរការ
+ មិន​ស្គាល់​កំហុស
+ ប្ážáž¼ážšâ€‹áž–ាក្យសម្ងាážáŸ‹
+ លប់គណនី
+ បង្កើážáž‚ណនី
+ ផ្ទុកឡើងពី...
+ ឈ្មោះ​ážáž
+ កំពុង​ážáŸ‚ផ្ទុកឡើង...
+ ការផ្ទុកឡើងបាន​ជោគជáŸáž™
+ ការផ្ទុកឡើងបាន​បរាជáŸáž™
+ កំពុង​ធ្វើការទាញយក...
+ ការទាញយក​បានជោគជáŸáž™
+ ការទាញយក​បានបរាជáŸáž™
+ ជ្រើស​គណនី
+ ផ្លាស់ទីទាំងអស់
+ សូម ដាក់​បញ្ចូល App PIN របស់អ្នក
+ បញ្ចូល App PIN របស់អ្នក
+ សូម បញ្ចូល App PIN របស់អ្នក​ម្ážáž„​ទៀáž
+ លុប App PIN របស់​អ្នក
+ App PIN ទាំងនáŸáŸ‡â€‹áž˜áž·áž“ដូចគ្នាទáŸ
+ App PIN មិន​ážáŸ’រឹម​ážáŸ’រូវទáŸ
+ App PIN បាន​លុបចáŸáž‰áž ើយ
+ App PIN បាន​យក​មកវិញ
+ កំពុង​​ážáŸ‚​ព្យាយាម​ដើម្បី​ចូល...
+ គ្មានបណ្ážáž¶áž‰â€‹ážáž—្ជាប់ទáŸ
+ ការážáž—្ជាប់កំពុង​ážáŸ‚ធ្វើážáŸážŸáŸ’áž...
+ មិនស្គាល់កំហុសបានកើážáž¡áž¾áž„!
+ រក្សាឯកសាររហូážážŠáž›áŸ‹áž€áž¶áž›áž”រិច្ឆáŸáž‘
+ ប្ដូរ​ឈ្មោះ
+ ដកចáŸáž‰
+ ការដកយកចáŸáž‰áž”ានជោគជáŸáž™
+ ការដកយកចáŸáž‰áž”ានបរាជáŸáž™
+ បញ្ចូលឈ្មោះážáŸ’មី
+ áž–áŸážáŸŒáž˜áž¶áž“​លម្អិáž
+ លាក់​បាំង
+ ប្រទáŸážŸáŸˆ
+ រដ្ឋៈ
+ ទីážáž¶áŸ†áž„ៈ
+ សុពលភាព:
+ ចាប់ពីៈ
+ ážšáž áž¼ážážŠáž›áŸ‹áŸˆ
+ áž ážáŸ’ážáž›áŸážáž¶:
+ ផ្ញើ
+
+ គណនី
+ ážáž»ážŸâ€‹áž–ាក្យ​សម្ងាážáŸ‹
+ ជ្រើស
+ សុវážáŸ’ážáž·áž—ាព
+
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index c757504ac2..56e55a1dc9 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -1,2 +1,4 @@
-
+
+
+
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 8ac5cc9da5..4a0df83f71 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -7,17 +7,16 @@
다른 ì•±ì˜ ì½˜í…ì¸
파ì¼
로 열기
- ë””ë ‰í„°ë¦¬ 만들기
+ 새 í´ë”
ì„¤ì •
세부내용
+ 보내기
ì¼ë°˜
ë” ì¤‘ìš”í•¨
ê³„ì •
ê³„ì • 관리
앱 암호
ë‚´ í´ë¼ì´ì–¸íŠ¸ 보호
- ìžë™ 업로드 사용
- ì¹´ë©”ë¼ë¡œ ì´¬ì˜í•œ 사진 ìžë™ 업로드
로깅 허용
ì´ê±´ 로그 ë¬¸ì œì— ì‚¬ìš©ë©ë‹ˆë‹¤
로그 기ë¡
@@ -29,14 +28,13 @@
임프린트
%1$s ì„ ìŠ¤ë§ˆíŠ¸í°ì—ì„œ 사용해보세요!
서버 확ì¸
- 서버 주소
+ 서버 주소 https://…
ì‚¬ìš©ìž ì´ë¦„
암호
%1$sì˜ ìƒˆë¡œìš´ 사용ìžìž…니까?
파ì¼
ì ‘ì†
업로드
- ì—…ë¡œë“œí• ë””ë ‰í„°ë¦¬ë¥¼ ì„ íƒí•´ì£¼ì„¸ìš”:
ê³„ì • ì—†ìŒ
ì´ ìž¥ì¹˜ì— %1$s ê³„ì •ì´ ì—†ìŠµë‹ˆë‹¤. ë¨¼ì € ê³„ì •ì„ ì„¤ì •í•˜ì‹ì‹œì˜¤.
ì„¤ì •
@@ -45,7 +43,7 @@
ë°›ì€ ì½˜í…ì¸ ê°€ 없습니다. ì—…ë¡œë“œí• í•ëª©ì´ 없습니다.
%1$sì—ì„œ ê³µìœ ëœ ì½˜í…ì¸ ì— ì ‘ê·¼í• ìˆ˜ 없습니다
업로드 중
- ì´ í´ë”ì— íŒŒì¼ì´ 없습니다.\n메뉴 ì˜µì…˜ì˜ \"업로드\" í•ëª©ì„ 사용하여 새 파ì¼ì„ ì—…ë¡œë“œí• ìˆ˜ 있습니다.
+ ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤. ì—…ë¡œë“œí• ìˆ˜ 있습니다!
파ì¼ì„ 누르면 추가 ì •ë³´ê°€ 표시ë©ë‹ˆë‹¤.
í¬ê¸°:
종류:
@@ -54,6 +52,7 @@
다운로드
íŒŒì¼ ìƒˆë¡œê³ ì¹¨
업로드 중 íŒŒì¼ ì´ë¦„ì„ %1$s(으)ë¡œ 변경하였습니다
+ ë§í¬ ê³µìœ
예
아니요
확ì¸
@@ -69,7 +68,7 @@
ê³„ì • ì‚ì œ
ê³„ì • 만들기
다ìŒì—ì„œ 업로드...
- ë””ë ‰í„°ë¦¬ ì´ë¦„
+ í´ë” ì´ë¦„
업로드 중...
%1$d%% %2$s 업로드 중
업로드 성공
@@ -92,15 +91,12 @@
파ì¼ì„ ë™ê¸°í™”í• ìˆ˜ 없었습니다
íŒŒì¼ %1$dê°œì˜ ë‚´ìš©ì„ ë™ê¸°í™”í• ìˆ˜ 없었습니다 (ì¶©ëŒ %2$dê°œ)
몇몇 로컬 파ì¼ì´ 사ë¼ì¡ŒìŠµë‹ˆë‹¤.
- %1$d 파ì¼ì„ %2$s ë””ë ‰í† ë¦¬ì— ë³µì‚¬í•˜ì§€ 못하였습니다.
- 1.3.16 ë²„ì „ì—ì„œ, íŒŒì¼ ì—…ë¡œë“œëŠ” ë‹¤ìˆ˜ì˜ ê³„ì •ì´ ë™ì‹œì— ì ‘ì†ë ë•Œ ë°ì´í„° ìœ ì‹¤ì„ í”¼í•˜ê¸° 위해 로컬 %1$s í´ë”ë¡œ 복사ë©ë‹ˆë‹¤.âŽ\nâŽ\nì´ ë³€í™”ë¡œ ì¸í•´, ì˜ˆì „ ë²„ì „ìœ¼ë¡œ ì˜¬ë¦¬ì‹ íŒŒì¼ë“¤ì€ %2$s í´ë”ë¡œ 복사ë˜ì—ˆìŠµë‹ˆë‹¤. 그러나, ê³„ì • ë™ê¸°í™”중 오류로 ì¸í•´ ìž‘ì—…ì„ ì™„ë£Œí•˜ì§€ ëª»í• ìˆ˜ 있습니다. 파ì¼ì„ ë‚¨ê¸°ì‹œê³ %3$së¡œ ì—°ê²°ë˜ëŠ” ë§í¬ë¥¼ 지우시거나, í˜¹ì€ íŒŒì¼ì„ %1$s í´ë”ë¡œ ì´ë™ì‹œí‚¤ê³ , %4$sì— ë§í¬ë¥¼ ìœ ì§€ì‹œí‚¬ìˆ˜ 있습니다.âŽ\nâŽ\n아래ì—는 로컬 파ì¼ê³¼ ë”불어, %5$së¡œ ë§í¬ëœ 리모트 파ì¼ë“¤ì˜ 목ë¡ì´ 있습니다.\n
%1$s í´ë”ê°€ 존재하지 않습니다.
ëª¨ë‘ ì˜®ê¹€
ëª¨ë“ íŒŒì¼ ì˜®ê¹€
몇몇 파ì¼ì„ 옮기지 못했습니다.
로컬: %1$s
ì›ê²©: %1$s
- ì„ íƒí•œ 파ì¼ì„ %1$sí´ë”ì— ë„£ê¸°ì—는 ê³µê°„ì´ ì¶©ë¶„í•˜ì§€ 않습니다. 다른곳으로 ì˜®ê¸°ì‹œê² ìŠµë‹ˆê¹Œ?
앱 암호를 ìž…ë ¥í•˜ì‹ì‹œì˜¤
앱 암호를 ìž…ë ¥í•˜ì‹ì‹œì˜¤
ì•±ì„ ì‹œìž‘í• ë•Œë§ˆë‹¤ 암호를 물어봅니다
@@ -120,6 +116,7 @@
지ì›í•˜ì§€ 않는 미디어 ì½”ë±
미디어 파ì¼ì„ ì½ì„수
미디어 파ì¼ì´ ì œëŒ€ë¡œ ì¸ì½”ë“œ ë˜ì§€ 않았습니다
+ ìž¬ìƒ ì‹œë„ ì¤‘ ì‹œê°„ì´ ì´ˆê³¼ë¨
미디어 파ì¼ì„ ìŠ¤íŠ¸ë¦¬ë° í• ìˆ˜ 없습니다
ë‚´ìž¥ëœ ë¯¸ë””ì–´ í”Œë ˆì´ì–´ì—서는 ì´ ë¯¸ë””ì–´ 파ì¼ì„ 재ìƒí• 수 없습니다
%1$s 를 재ìƒí•˜ëŠ” ì¤‘ì— ë³´ì•ˆì˜¤ë¥˜ê°€ ë°œìƒí•¨
@@ -134,6 +131,8 @@
ì—°ê²°ë¨
연결 테스트 중...
서버 ì„¤ì •ì´ ìž˜ëª»ë¨
+ ê°™ì€ ì‚¬ìš©ìžì™€ ì„œë²„ì— ëŒ€í•œ ê³„ì •ì´ ì´ë¯¸ 존재합니다
+ ìž…ë ¥ëœ ì‚¬ìš©ìžê°€ ì´ ê³„ì •ì˜ ì‚¬ìš©ìžì™€ ì¼ì¹˜í•˜ì§€ ì•ŠìŒ
ì•Œ 수 없는 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤!
호스트를 ì°¾ì„ ìˆ˜ ì—†ìŒ
서버 ì¸ìŠ¤í„´ìŠ¤ë¥¼ ì°¾ì„ ìˆ˜ ì—†ìŒ
@@ -157,8 +156,6 @@
파ì¼ì„ ìµœì‹ ì •ë³´ë¡œ ìœ ì§€
ì´ë¦„ 바꾸기
ì‚ì œ
- %1$sì„(를) ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
- %1$s ë° ê·¸ ë‚´ìš©ì„ ì‚ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?
로컬만
로컬 콘í…ì¸ ë§Œ
서버ì—ì„œ ì‚ì œ
@@ -170,7 +167,7 @@
ì´ë¦„ì„ ë³€ê²½í• ìˆ˜ 없었습니다
ì›ê²© 파ì¼ì„ 확ì¸í• 수 없었습니다
íŒŒì¼ ë‚´ìš©ì´ ì´ë¯¸ ë™ê¸°í™”ë˜ì—ˆìŠµë‹ˆë‹¤
- ë””ë ‰í„°ë¦¬ë¥¼ 만들 수 없었습니다
+ ì‚¬ìš©í• ìˆ˜ 없는 문ìžë“¤: / \\ < > : \" | ? *
ìž ì‹œ ê¸°ë‹¤ë ¤ 주ì‹ì‹œì˜¤
예ìƒí•˜ì§€ 못한 오류입니다. 다른 앱ì—ì„œ 파ì¼ì„ ì„ íƒí•˜ì‹ì‹œì˜¤
ì„ íƒí•œ íŒŒì¼ ì—†ìŒ
@@ -200,7 +197,7 @@
ì•Œê³ ë¦¬ì¦˜:
ì´ê²ƒì€ í”Œë ˆì´ìŠ¤í™€ë”입니다
placeholder.txt
- PNG 파ì¼
+ PNG 그림
389 KB
2012/05/18 12:23 PM
12:23:45
@@ -212,16 +209,13 @@
ë®ì–´ì“°ê¸°
업로드하지 ì•ŠìŒ
그림 미리보기
- ì´ ê·¸ë¦¼ì„ ë³¼ìˆ˜ 없습니다
- %1$s를 %2$s 로컬 ë””ë ‰í† ë¦¬ë¡œ 복사하지 못했습니다.
- ìžë™ 업로드가 실패했습니다\"
- ìžë™ 업로드 실패함
- ì‹¤íŒ¨ëœ ìžë™ 업로드 ì „ì²´ 요약
- ì „ì²´ ì„ íƒ
- ì „ì²´ ì„ íƒ ìž¬ì‹œë„
- ì„ íƒëœ 업로드 í ì „ì²´ ì‚ì œ
- ì´ë¯¸ì§€ 업로드 재시ë„:
- ë” ë§Žì€ ì‚¬ì§„ 불러오기
- 실패 메시지:
- 서버 ì„¤ì •ì„ í™•ì¸í•´ì£¼ì„¸ìš”, 아마 업로드 ì œí•œì„ ì´ˆê³¼í•˜ì…¨ì„ê²ë‹ˆë‹¤.
+ 보내기
+ ë§í¬ 복사
+ í´ë¦½ë³´ë“œë¡œ 복사ë¨
+
+ ê³„ì •
+ ì¸ì¦ 필요함
+ ìž˜ëª»ëœ ì•”í˜¸
+ ì„ íƒ
+ 보안
diff --git a/res/values-ku-rIQ/strings.xml b/res/values-ku-rIQ/strings.xml
index c40ddc5336..2e843f2db0 100644
--- a/res/values-ku-rIQ/strings.xml
+++ b/res/values-ku-rIQ/strings.xml
@@ -1,12 +1,32 @@
بارکردن
+ په‌ڕگەکان
ده‌ستكاری
+ گشتی
+ هەژمارەکان
یارمەتی
- ناونیشانی ڕاژه
ناوی به‌کارهێنه‌ر
وشەی تێپەربو
+ په‌ڕگەکان
+ بەستنەوە
بارکردن
+ هیچ هەژمارێک نه‌دۆزرایه‌وه‌
+ جێگیرکردن
+ دەرچوون
+ بارکردن
+ قەبارە:
+ جۆر:
+ درووستبووە:
+ گۆردراو:
داگرتن
+ بەڵێ
+ نەخێر
+ باشە
+ لابردن
+ پاشکەوتکردن & دەرچوون
هه‌ڵه
+ ناوی بوخچه
+
+ هەژمارەکان
diff --git a/res/values-lb/strings.xml b/res/values-lb/strings.xml
index f7a0fe6623..19b003ecf9 100644
--- a/res/values-lb/strings.xml
+++ b/res/values-lb/strings.xml
@@ -4,16 +4,15 @@
Eroplueden
Dateien
Opmaachen mat
- Dossier erstellen
Astellungen
Detailer
+ Schécken
Allgemeng
Méi
Accounten
App PIN
Hëllef
Feedback
- Server Adress
Benotzernumm
Passwuert
Dateien
@@ -23,11 +22,13 @@
Setup
Erausgoen
Eroplueden
+ Hei ass näischt. Lued eppes rop!
Gréisst:
Typ:
Erstallt:
Geännert:
Download
+ Link deelen
Jo
Nee
OK
@@ -40,7 +41,7 @@
Passwuert änneren
Account läschen
Account erstellen
- Dossier\'s Numm
+ Dossiers Numm:
Gett eropgelueden ...
Eroplueden färdeg
Eroplueden huet net geklappt
@@ -80,6 +81,8 @@
Béid halen
Iwwerschreiwen
Net eroplueden
- all auswielen
- Fehler Message:
+ Schécken
+
+ Accounten
+ Auswielen
diff --git a/res/values-lt-rLT/strings.xml b/res/values-lt-rLT/strings.xml
index ad28304341..70bc85d524 100644
--- a/res/values-lt-rLT/strings.xml
+++ b/res/values-lt-rLT/strings.xml
@@ -7,17 +7,20 @@
Turinys iš kitų programų
Failai
Atverti naudojant
- Kurti aplankÄ…
+ Naujas aplankas
Nustatymai
Informacija
+ Siųsti
Bendras
Daugiau
Paskyros
Tvarkyti paskyras
App programos PIN kodas
Apsaugokite savo klientÄ…
- Įjungti momentinius įkėlimus
+ Momentiniai nuotraukų įkėlimai
Iš karto nusiųsti nufotografuotas nuotraukas
+ Momentiniai video įkėlimai
+ Iš karto nusiųsti sukurtus video failus
Įjungti žurnalo rašymą
Tai naudojama problemų žurnalo vedimui
Žurnalų istorija
@@ -28,15 +31,15 @@
Atsiliepimai
Imprint
Išbandykite %1$s savo išmaniajame telefone!
- SiÅ«lau pabandyti %1$s savo iÅ¡maniajame telefone!\nParsisiųskite Å¡tai Äia: %2$s
Patikrinti Serverį
- Serverio adresas
+ Serverio adresas
Prisijungimo vardas
Slaptažodis
+ Naujas į %1$s?
Failai
Prisijungti
Įkelti
- Nustatyti įkėlimų katalogą.
+ Nustatyti įkėlimų aplanką:
Paskyrų nerasta
Jūsų įrenginyje nėra nė vienos %1$s paskyros. Prašome pirmiausia susikurti paskyrą.
Nustatymai
@@ -45,7 +48,9 @@
nebuvo gauta turinio. Nėra įkeltino turinio
%1$s neleidžiama prieiti prie turinio, kuriuo dalijamasi
IÅ¡siunÄiama
- Šiame aplanke failų nėra.\nNauji failai gali būti pridėti naudojant \"Įkelti\" funkciją meniu.
+ ÄŒia tuÅ¡Äia. Ä®kelkite kÄ… nors!
+ Įkeliama ...
+ Šiame aplanke nėra failų.
Palieskite failÄ…, kad parodyti papildomÄ… informacijÄ….
Dydis:
Tipas:
@@ -54,6 +59,8 @@
Atsisiųsti
Atnaujinti failÄ…
Įkėlimo metu failas buvo pervadintas į %1$s
+ Dalintis nuoroda
+ Nebesidalinti nuoroda
Taip
Ne
Gerai
@@ -69,13 +76,14 @@
IÅ¡trinti paskyrÄ…
Sukurti paskyrÄ…
Įkelti iš ...
- Aplanko pavadinimas
+ Katalogo pavadinimas
Įkeliama ...
%1$d%% SiunÄiama %2$s
Nusiuntimas pavyko
%1$s buvo sėkmingai nusiųstas
Nusiuntimas nepavyko
Nepavyko baigti %1$s nusiuntimo
+ Įkėlimas nepavyko, Jums reikia prisijungti pakartotinai
AtsiunÄiama...
%1$d%% AtsiunÄiama %2$s
Atsiuntimas pavyko
@@ -83,8 +91,10 @@
Atsiuntimas nepavyko
Nepavyko baigti %1$s atsiuntimo
Dar neatsiųsta
+ Atsisiuntimas nepavyko, Jums reikia prisijungti pakartotinai
Pasirinkite paskyrÄ…
Sinchronizacija nepavyko
+ Sinchronizacija nepavyko. Jums reikia prisijungti iš naujo
%1$s sinchronizacija nepavyko
Netinkamas slaptažodis %1$s
Rastas konfliktas
@@ -111,6 +121,7 @@
%1$s sąrašas baigtas
Nerasta medija failų
Nenurodyta paskyra
+ Failas yra netinkamoje sÄ…skaitoje
Nepalaikomas kodekas
Nenuskaitomas medijos failas
Netinkamai užkoduotas medijos failas
@@ -120,7 +131,10 @@
Saugumo klaida bandant paleisti %1$s
Įvesties klaida bandant paleisti %1$s
NetikÄ—ta klaida bandant paleisti %1$s
+ Atsukimo mygtukas
Grojimo arba pauzÄ—s mygtukas
+ Prasukimo mygtukas
+ Gaunama autorizacijÄ…...
Bandoma prisijungti...
Nėra tinklo ryšio
Saugus prisijungimas negalimas.
@@ -148,10 +162,11 @@
Jungiamasi prie autentikacijos serverio...
Serveris nepalaiko Å¡io autentikacijos metodo
%1$s nepalaiko kelių paskyrų iš karto
+ Jungiamasi prie autentikacijos serverio...
Laikyti failÄ… naujinamÄ…
Pervadinti
Pašalinti
- Ar tikrai norite pašalinti %1$s ?
+ Ar tikrai norite pašalinti %1$s?
Ar tikrai norite pašalinti %1$s ir ten esantį turinį?
Tik vietiniai
Tik vietinis turinys
@@ -165,9 +180,12 @@
Nutolę failai negalėjo būti patikrinti
Failo turinys jau sunchronizuotas
Aplanko sukurti nepavyko
+ Neleistini simboliai: / \\ < > : \" | ? *
+ Failo pavadinimas negali bÅ«ti tuÅ¡Äias
Truputį palaukite
Netikėta problema ; prašome pasirinkti failą iš kitos programėlės
Joks failas nebuvo pasirinktas
+ Siųsti nuorodą asmeniui ...
Prisijungti naudojant oAuth2
Jungiamasi prie oAuth2 serverio...
Serverio tapatybė negali būti patikrinta
@@ -192,21 +210,29 @@
Iki:
Parašas:
Algoritmas:
+ Sertifikatas negali būti parodytas.
+ - NÄ—ra informacijos apie klaidÄ…
PNG paveikslÄ—lis
389 KB
2012/05/18 12:23 PM
12:23:45
Įkelti nuotraukas tik kai prisijungiama per WiFi
+ Įkelti video tik per WiFi
Atnaujinimo konfliktas
Nutolęs failas %s nėra sinchronizuotas su vietiniu failu. Jei tęsite, failas serveryje bus pakeistas.
Palikti abu
Perrašyti
Nebesiųsti
Paveikslėlio peržiūra
- Neįmanoma parodyti paveikslėlio
- pažymėti viską
- bandyti iš naujo nusiųsti paveikslėlį:
- Įkelti daugiau Nuotraukų
- Klaidos pranešimas:
- Patikrinkite savo serverio nustatymus, tikėtina jog viršijote savo limitą.
+ Neįmanoma parodyti šio paveikslėlio
+ Įvyko klaida bandant dalinti šį failą ar aplanką
+ Įvyko klaida bandant nebedalinti šio failu ar aplanku
+ Siųsti
+ Kopijuoti nuorodÄ…
+ Nukopijuota į talpyklę
+
+ Paskyros
+ Neteisingas slaptažodis
+ Pasirinkite
+ Saugumas
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 37eb6b9755..88df8292b8 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -3,18 +3,16 @@
AugÅ¡upielÄdÄ“t
Saturs no citÄm lietotnÄ“m
Datnes
- Izveidot direktoriju
+ Jauna mape
Iestatījumi
+ Sūtīt
VispÄrÄ«gi
VairÄk
Konti
PÄrvaldÄ«t kontus
Lietotnes PIN
AizsargÄ savu klientu
- AktivÄ“t tÅ«lÄ«tÄ“jo augÅ¡upielÄdÄ“Å¡anu
- NekavÄ“joties augÅ¡upielÄdÄ“t kameras uzņemtos attÄ“lus
Palīdzība
- Servera adrese
LietotÄjvÄrds
Parole
Datnes
@@ -28,7 +26,7 @@
Nav saņemts nekÄds saturs. Nav ko augÅ¡upielÄdÄ“t.
%1$s nedrīkst piekļūt koplietotajam saturam
AugÅ¡upielÄdÄ“
- Å ajÄ mapÄ“ nav datņu.\nJaunas datnes var pievienot ar izvÄ“lnes opciju “AugÅ¡upielÄdÄ“tâ€
+ Te vÄ“l nekas nav. RÄ«kojies, sÄc augÅ¡upielÄdÄ“t!
Uzsitiet uz datnes, lai redzÄ“tu papildinformÄciju.
Izmērs:
Tips:
@@ -44,12 +42,14 @@
Atcelt
SaglabÄt un iziet
Kļūda
+ IelÄdÄ“
+ NezinÄma kļūda
Par
Mainīt paroli
Dzēst kontu
Izveidot kontu
AugÅ¡upielÄdÄ“t no...
- Direktorijas nosaukums
+ Mapes nosaukums
AugÅ¡upielÄdÄ“ ...
%1$d%% augÅ¡upielÄdÄ“ %2$s
AugÅ¡upielÄde ir veiksmÄ«ga
@@ -78,9 +78,11 @@
Nepareizs lietotnes PIN
Lietotnes PIN ir izņemts
Lietotnes PIN ir noglabÄts
+ Mēģina ierakstīties...
Nav tīkla savienojumu
Nav pieejams drošs savienojums.
Savienojums ir izveidots
+ Testē savienojumu...
Slikti formatÄ“ta servera konfigurÄcija
GadÄ«jÄs nezinÄma kļūda!
Nevarēja atrast datoru
@@ -94,8 +96,6 @@
UzturÄ“t datni aktuÄlu
PÄrsaukt
Izņemt
- Vai tieÅ¡Äm vÄ“laties izņemt %1$s?
- Vai vÄ“laties izņemt %1$s un tÄ saturu?
Tikai lokÄlos
Tikai lokÄlo saturu
Izņemt no servera
@@ -107,7 +107,6 @@
NevarÄ“ja pabeigt pÄrsaukÅ¡anu
NevarÄ“ja atzÄ«mÄ“t attÄlinÄtas datnes
Datnes saturs jau ir sinhronizēts
- Nevarēja izveidot direktoriju
Uzgaidīt brīdi
Negaidīta problēma; lūdzu, izvēlieties datni no citas lietotnes
Netika izvēlēta neviena datne
@@ -140,4 +139,9 @@
Paturēt abas
PÄrrakstÄ«t
NeaugÅ¡upielÄdÄ“t
+ Sūtīt
+
+ Konti
+ Izvēlieties
+ Drošība
diff --git a/res/values-mg/strings.xml b/res/values-mg/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-mg/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 720e4da08e..e7b4906ec4 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -3,9 +3,10 @@
Подигни
Датотеки
Отвори Ñо
- Создади папка
+ Ðова папка
Параметри
Детали:
+ Прати
Општо
Повеќе
Сметки
@@ -16,7 +17,7 @@
Помош
Препорачај на пријател
Повратен одговор
- ÐдреÑа на Ñервер
+ ÐдреÑа на Ñерверот https://…
КориÑничко име
Лозинка
Датотеки
@@ -25,11 +26,13 @@
Ðе е пронајдена Ñметка
Ðагодување
Прекини
+ Тука нема ништо. Снимете нешто!
Големина:
Тип:
Создадено:
Изменето:
Преземање
+ Сподели ја врÑката
Да
Ðе
Во ред
@@ -42,7 +45,10 @@
Смени лозинка
Избриши ја Ñметката
Креирај Ñметка
- Име на папката
+ подигни од ...
+ Име на папка
+ Подигнувам...
+ Подигањето беше уÑпешно
Преземање...
Преземањето е уÑпешно
Преземањето не беше уÑпешно
@@ -60,23 +66,33 @@
Ðпликативниот ПИРе Ñнимен
Обиди Ñе да Ñе најавиш...
Ðема мрежна конекција
+ Ðема безбедна конекција.
+ Конекцијата е воÑпоÑтавена
Ја теÑтирам врÑката...
+ Се појави непознаа грешка!
+ Ðе можев да го најдам хоÑтот
СерверÑката инÑтанца не е пронајдена
Ðа Ñерверот му треба премногу време за да одговори
ÐеуÑпешна SSL иницијализација
+ Ðе можев да го проверам SSL ÑерверÑкиот идентитет
Верзијата на Ñерверот не е препознаена
+ Ðе може да Ñе воÑпоÑтави конекција
+ ВоÑпоÑтавена е безбедна конекција
Погрешно кориÑничко име или лозинка
ÐеуÑпешна авторизација
ВнеÑете ја вашата тековна лозинка:
+ Чувај ги датотеките ажурно
Преименувај
ОтÑтрани
+ Дали навиÑтина Ñакаш да ја отÑтраниш %1$s?
Само локално
ОтÑтрани од Ñерверот
ДалечинÑко и локално
ОдÑтранувањето е уÑпешно
ОдÑтранувањето е неуÑпешно
ВнеÑи ново име
- Ðе можам да креирам папка
+ Преименувањето не можеше да Ñе комплетира
+ Папката не можеше да Ñе креира
Почекајте малку
Ðеочекуван проблем ; ве молам одберете датотека од друга апликација
Ðема избрано датотека
@@ -100,5 +116,11 @@
Конфликт при надградбата
Задржи ги и двете
Препиши
- избери Ñе
+ Прати
+
+ Сметки
+ Потребна е автентификација
+ Погрешна лозинка
+ Избери
+ БезбедноÑÑ‚
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index c757504ac2..75c6f22f5e 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -1,2 +1,6 @@
-
+
+ ഫയലàµà´•àµ¾
+ ഫയലàµà´•àµ¾
+
+
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-ml/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-mn/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index b2b8fdfe0e..af534d2ed3 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -2,14 +2,12 @@
Muat naik
Fail-fail
- Bina direktori
Set
Umum
Lanjutan
Akaun
PIN App
Bantuan
- Alamat pelayan
Nama pengguna
Kata laluan
Fail-fail
@@ -19,6 +17,7 @@
Device anda tidak mempunyai sebarang akaun %1$s. Mohon bina akaun dahulu.
Berhenti
Memuatnaik
+ Tiada apa-apa di sini. Muat naik sesuatu!
Saiz
Jenis
Telah dibina:
@@ -34,7 +33,6 @@
Mengenai
Ubah kata laluan
Padam akaun
- Nama direktori
Muatnaik berjaya
Muatnaik gagal
Muatturun....
@@ -46,4 +44,6 @@
Namakan
Buang
Lokal sahaja
+
+ Akaun
diff --git a/res/values-mt-rMT/strings.xml b/res/values-mt-rMT/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-mt-rMT/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 4318b6af2b..7f998bf3a4 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -8,5 +8,8 @@
ဒေါင်းလုá€á€º
ဟုá€á€º
မဟုá€á€ºá€˜á€°á€¸
+ အá€á€¯á€€á€±
ပယ်ဖျက်မည်
+
+ ရွေးá€á€»á€šá€º
diff --git a/res/values-nb-rNO/strings.xml b/res/values-nb-rNO/strings.xml
index f7c70fd79c..55e2bb4cb5 100644
--- a/res/values-nb-rNO/strings.xml
+++ b/res/values-nb-rNO/strings.xml
@@ -1,33 +1,67 @@
+ %1$s Android app
+ versjon %1$s
+ Oppdater konto
Last opp
Innhold fra andre applikasjoner
Filer
- Opprett katalog
+ Ã…pne med
+ Ny mappe
Innstillinger
+ Detaljer
+ Send
Generelt
Mer
Kontoer
- Last opp bilder tatt med kamera øyeblikkelig
+ HÃ¥ndter kontoer
+ PIN kode
+ Beskytt klienten din
+ Umiddelbare bildeopplastninger
+ Last opp bilder tatt av kameraet umiddelbart
+ Umiddelbare video-opplastninger
+ Last opp videoer tatt opp av kameraet umiddelbart
+ Aktiver loggføring
+ Denne er brukt til å loggføre problemer
+ Loggføringshistorikk
+ Denne viser de lagrede loggene
+ Slett historikk
Hjelp
- Server-adresse
+ Anbefal til en venn
+ Tilbakemelding
+ Avtrykk
+ Prøv %1$s på smarttelefonen din!
+ Jeg ønsker å invitere deg til å bruke %1$s på smarttelefonen din!\nLast ned her: %2$s
+ Sjekk server
+ Serveradresse https://...
Brukernavn
Passord
+ Ny med %1$s?
Filer
Koble til
Last opp
+ Velg opplastingsmappe:
Ingen konto funnet
+ Det finnes ingen %1$s kontoer for din enhet. For å bruker denne appen må du først opprette en.
Oppsett
Avslutt
Intet innhold å laste opp
Intet innhold ble mottatt. Intet å laste opp.
+ %1$s har ikke tilgang til det delte innholdet
Laster opp
+ Ingenting her. Last opp noe!
+ Laster...
+ Det er ingen filer i denne mappen.
Trykk på en fil for å vise ekstra informasjon.
Størrelse:
Type:
Opprettet:
Endret:
Last ned
+ Oppdater fil
+ Filnavnet ble endret til %1$s under opplasting
+ Del lenke
+ Avslutt deling av lenke
Ja
Nei
OK
@@ -36,57 +70,212 @@
Avbryt
Lagre og avslutt
Feil
+ Laster...
+ Ukjent feil
Om
Endre passord
Slett konto
Opprett konto
Last opp fra...
- Katalognavn
+ Mappenavn
Laster opp...
%1$d%% Laster opp %2$s
Opplasting fullført
+ %1$s ble lastet opp
Opplasting feilet
Opplasting av %1$s kunne ikke fullføres
+ Opplasting feilet. Du må logge inn på nytt
Laster ned...
%1$d%% Laster ned %2$s
Nedlasting fullført
+ %1$s ble lastet ned
Nedlasting feilet
Nedlasting av %1$s kunne ikke fullføres
+ Ikke lastet ned enda
+ Nedlasting feilet. Du må logge inn på nytt
Velg konto
Synkronisering feilet
+ Synkronisering feilet, du må logge inn på nytt
Synkronisering av %1$s kunne ikke fullføres
+ Ugyldig passord for %1$s
Konflikter funnet
+ %1$d hold-i-synk filer kunne ikke synkroniseres
+ Hold i synk filer mislyktes
+ Innholdet av %1$d filer kunne ikke synkroniseres (%2$d konflikter)
+ Noen lokale filer ble glemt
+ %1$d filer fra %2$s mappen kunne ikke kopieres til
+ Fra versjon 1.3.16 blir filer som lastes opp fra denne enheten kopiert inn i den lokale mappen %1$s for å forhindre tap av data når samme fil synkroniseres med flere kontoer.\n\nPga. denne endringen ble alle filer som er blitt lastet opp med tidligere versjoner av denne appen, kopiert til mappe %2$s. Imidlertid kunne ikke denne kopieringen fullføres under konto-synkroniseringen pga. en feil. Du kan enten la filen(e) ligge der de ligger og fjerne lenken til %3$s, eller flytte filene til mappe %1$s og beholde lenken til %4$s.\n\nNedenfor finner du en liste over de lokale filene og de eksterne filene i %5$s som de var lenket til.
+ Mappen %1$s finnes ikke lengere
+ Flytt alle
+ Alle filer ble flyttet
+ Noen filer kunne ikke fjernes
+ Lokal: %1$s
+ Ekstern: %1$s
+ Det er ikke nok plass til å kopiere de valgte filene inn i mappen %1$s. Vil du flytte dem i stedet?
Vennligst tast inn din App-PIN
+ Skriv inn din PIN kode
+ PIN koden vil bli ettersourt hver gang appen starter
+ Vennligst tast inn din PIN kode på nytt
+ Fjern din PIN kode
+ PIN kodene du tastet er ulike
+ Feil PIN kode
+ PIN kode fjernet
+ PIN kode lagret
+ %1$s musikkspiller
+ %1$s (spiller)
+ %1$s (laster)
+ %1$s avspilling avsluttet
+ Ingen mediafil funnet
+ Ingen konto angitt
+ Filen er ikke i en gyldig konto
+ Mediakodek er ikke støttet
+ Mediafilen kunne ikke leses
+ Mediafilen er ikke riktig kodet
+ Tidsavbrudd under avspillingsforsøk
+ Mediafilen kan ikke strømmes
+ Mediafilen kan ikke spilles med standard mediaspiller
+ Sikkerhetsfeil under avspilling av %1$s
+ Inputfeil under avspilling av %1$s
+ Uforventet feil under avspilling av %1$s
+ Spol tilbake
+ Spill eller pause
+ Spol fremover
+ Henter godkjenning...
Prøver å logge inn...
Ingen nettverkstilkobling
Sikker tilkobling ikke tilgjengelig.
Tilkobling opprettet
Tester tilgang...
+ Feil i server konfigurasjon
+ En konto for samme bruker og server finnes allerede på enheten
+ Den innskrevne brukeren matcher ikke brukeren av denne kontoen
Ukjent feil oppstod!
Fant ikke tjener
+ Finner ikke server instans
Serveren brukte for lang tid på å svare
Feil formatert URL
Oppstart av SSL feilet
+ Kunne ikke verifisere SSL-serverens identitet
+ Ukjent server versjon
Klarte ikke å opprette tilkobling
Sikker tilkobling opprettet
+ Feil brukernavn eller passord
+ Mislykket autorisasjon
+ Tilgang nektet av autorisasjonsserver
+ Uforventet tilstand; vennligst skriv inn serveradressen en gang til
+ Autorisasjonen din har gått ut. Vennligt autoriser igjen
+ Vennligst skriv inn gjeldende passord
+ Sesjonen din har gått ut. Vennligst koble til igjen
+ Kobler til autorisasjonsserver...
+ Serveren støtter ikke denne autorisasjonsmetoden
+ %1$s støtter ikke flere kontoer
+ Tjeneren din svarer ikke med korrekt bruker-ID, vennligst ta kontakt med en administrator
+
+ Kan ikke autentisere mot denne serveren
Hold filen oppdatert
Endre navn
Fjern
- Er du sikker på at du vil fjerne %1$s ?
+ Vil du virkelig fjerne %1$s?
+ Vil du virkelig fjerne %1$s inkludert innholdet?
Kun lokalt
+ Kun lokalt innhold
Fjern fra server
+ Ekstern og lokal
+ Fjerning var vellykket
+ Fjerning mislyktes
+ Skriv inn et nytt navn
+ Lokal kopi kunne ikke endre navn; prøv et annet navn
Klarte ikke å endre navn
+ Eksterne filer kunne ikke sjekkes
+ filinnhold er allerede synkronisert
Mappe kunne ikke opprettes
+ Forbudte tegn: / \\ < > : \" | ? *
+ Filnavn kan ikke være tomt
Vent et øyeblikk
+ Uforventet problem; vennligst velg filen fra en annen applikasjon
Ingen fil ble valgt
+ Send lenke til ...
+ Logg inn med oAuth2
+ Kobler til oAuth2 server...
Identiteten til siden kunne ikke verifiseres
- Serverens sertifikat er ikke til å stole på
- Serverens sertifikat er utløpt
+ - Server-sertifikatets gyldige datoer er i fremtiden
+ - Nettadressen samsvarer ikke med vertsnavnet i sertifikatet
+ Vil du stole på dette sertifikatet likevel?
+ Sertifikatet kunne ikke lagres
Detaljer
Skjul
+ Utstedt til:
+ Utstedt av:
+ Vanlig navn:
+ Organisasjon:
+ Organisasjonsenhet:
Land:
+ Stat:
+ Sted:
+ Gyldighet:
Fra:
Til:
Signatur:
+ Algoritme:
+ Sertifikatet kunne ikke vises.
+ - Ingen informasjon om feilen
+ Dette er en plassholder
+ placeholder.txt
+ PNG bilde
+ 389 KB
+ 18.05.2012 12:23
+ 12:23:45
+ Kun last opp bilder via WiFi
+ Last opp video kun via WiFi
+ /Direkteopplasting
+ Oppdateringskonflikt
+ Ekstern fil %s er ikke synkronisert med lokal fil. Hvis du fortsetter vil det erstatte innhold på serveren.
Behold begge
+ Overskriv
+ Ikke last opp
+ Bildeforhåndsvisning
+ Dette bildet kan ikke vises
+ %1$s kunne ikke kopieres til lokal mappe %2$s
+ Beklager, deling er ikke skrudd på for din tjener. Ta kontakt med
+ administratoren.
+ Kan ikke dele. Sjekk om filen eksisterer.
+ Det skjedde en feil under deling av denne filen eller mappen
+ Kan ikke fjerne deling. Sjekk om filen eksisterer.
+ En feil oppstod ved avslutting av delingen av denne filen eller mappen
+ Send
+ Kopier lenke
+ Kopiert til utklippstavlen
+ Kritisk feil: kan ikke utføre operasjonene
+ En feil oppstod ved oppretting av forbindelse til serveren.
+ En feil oppstod ved venting på svar fra serveren. Operasjonen kunne ikke utføres
+ En feil oppstod ved venting på svar fra serveren. Operasjonen kunne ikke utføres
+ Operasjonen kunne ikke fullføres. Server utilgjengelig
+
+ Du har ikke tillatelse til %s
+ å omdøpe denne filen
+ å slette denne filen
+ å dele denne filen
+ å avslutte deling av denne filen
+ å opprette filen
+ å laste opp i denne mappen
+ Filen finnes ikke på serveren lenger
+ Kontoer
+ Legg til en konto
+ Logger
+ Send historikk
+ logger for ownCloud Android app
+ Laster data...
+ Autentisering kreves
+ Feil passord
+ Flytt
+ Ingenting her. Du kan legge til en mappe!
+ Velg
+ Kan ikke flytte. Sjekk om filen eksisterer.
+ Det er ikke mulig å flytte en mappe inn i sin egen undermappe
+ Filen finnes allerede i målmappen
+ En feil oppstod ved flytting av denne filen eller mappen
+ å flytte denne filen
+ Sikkerhet
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index c757504ac2..56e55a1dc9 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -1,2 +1,4 @@
-
+
+
+
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 16a764900b..f79d9331ae 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -7,17 +7,20 @@
Inhoud van andere apps
Bestanden
Open met
- Creëer map
+ Nieuwe map
Instellingen
Details
+ Versturen
Algemeen
Meer
Accounts
Beheer accounts
App PIN
Beveilig je client
- Schakel direct uploaden in
- Upload afbeeldingen van camera automatisch
+ Directe uploads van afbeeldingen
+ Direct uploaden van foto\'s genomen met de camera
+ Direct uploaden van video\'s
+ Direct uploaden van video\'s vanaf de camera
Loggen aanzetten
Dit wordt gebruikt om problemen te loggen.
Log-geschiedenis
@@ -28,16 +31,17 @@
Feedback
afdruk
Probeer %1$s op uw smartphone!
- Uitnodiging om %1$s op uw smartphone uit te proberen!\nDownload hier: %2$s
+ Uitnodiging om %1$s op uw smartphone uit te proberen!
+Download hier: %2$s
Controleer server
- Server adres
+ Serveradres https://…
Gebruikersnaam
Wachtwoord
Nieuw bij %1$s?
Bestanden
Verbinden
Uploaden
- Selecteer upload map:
+ Kies upload map:
Geen account gevonden
Er zijn nog geen %1$s accounts op je apparaat. Stel eerst een account in.
Configureren
@@ -46,7 +50,9 @@
Er werd geen inhoud ontvangen. Niets om te uploaden.
%1$s is niet toegestaan om toegang te hebben tot de publieke inhoud
Uploaden
- Er zitten geen bestanden in deze map.\nNieuwe bestanden kunnen worden toegevoegd via de \"Upload\" menukeuze.
+ Er bevindt zich hier niets. Upload een bestand!
+ Laden ...
+ Er staan geen bestanden in deze map.
Druk op een bestand om extra informatie weer te geven
Grootte:
Type:
@@ -55,6 +61,8 @@
Download
Bestand verversen
Bestand was hernoemt naar %1$s tijdens het uploaden
+ Deel link
+ Link niet meer delen
Ja
Nee
OK
@@ -70,13 +78,14 @@
Verwijder account
Maak account aan
Upload van ...
- Map naam
+ Mapnaam
Uploaden ...
%1$d%% Uploaden %2$s
Upload succesvol
%1$s is met succes ge-upload
Upload mislukt
Upload van %1$s kon niet voltooid worden
+ Update mislukt, u moet opnieuw inloggen
Downloaden ...
%1$d%% Aan het downloaden %2$s
Downloaden gelukt
@@ -84,8 +93,10 @@
Downloaden mislukt
Download van %1$s kon niet worden voltooid
Nog niet gedownload
+ Download mislukt, u moet opnieuw inloggen
Kies account
Synchronisatie mislukt
+ Synchronisatie mislukt, opnieuw inloggen
Synchronisatie van %1$s kon niet worden voltooid
Ongeldig wachtwoord voor %1$s
Conflicten gevonden
@@ -93,15 +104,17 @@
In-sync-houden bestanden mislukt
Inhoud van %1$d bestanden kon niet worden gesynchroniseerd (%2$d conflicten)
Een paar lokale bestanden werden vergeten
- %1$d bestanden uit de %2$s directory konden niet worden gekopieerd naar
- Vanaf versie 1.3.16 worden bestanden die geüpload zijn vanaf dit apparaat gekopieerd naar de lokale %1$s map om gegevensverlies te voorkomen wanneer een enkel bestand wordt gesynchroniseerd met meerdere accounts.\n\nDoor deze wijziging zijn alle bestanden die met een voorgaande versie van deze app zijn geüpload gekopieërd naar de %2$s map. Echter, door een fout kon deze bewerking niet volledig uitgevoerd worden tijdens het synchroniseren van het account. U kunt het bestand / de bestanden laten zoals ze zijn en de link naar %3$s verwijderen, of het bestand / de bestanden verplaatsen naar de %1$s map en de links naar %4$s behouden.\n\nHieronder staan de locale bestanden, en de externe bestanden in %5$s waarnaar ze doorverwezen.
+ %1$d bestanden uit de %2$s map konden niet worden gekopieerd naar
+ Vanaf versie 1.3.16, worden bestanden die vanaf dit apparaat worden ge-uploaded ook gekopieerd naar de lokale %1$s map om gegevensverlies te voorkomen als een enkel bestand wordt gesynchroniseerd met meerdere accounts.
+Door deze aanpassing werden alle bestanden die met een eerdere versie zijn ge-uploaded gekopieerd naar de %2$s map. Maar een fout voorkwam het succesvol afronden van deze actie tijdens het synchroniseren. U kunt de/het bestand(en) laten staan zoals ze nu zijn en de link naar %3$s verwijderen, of u kunt de bestanden verplaatsen naar de %1$s map en de link naar %4$s laten staan.
+Hieronder staan de lokale bestanden en de externe bestanden in %5$s waar ze naar verwezen.
Map %1$s bestaat niet meer
Alle verplaatsen
Alle bestanden zijn verplaatst
Een paar bestanden konden niet worden verplaatst
Lokaal: %1$s
Extern: %1$s
- Er is niet genoeg ruimte om de gekopieerde bestanden ook te plaatsen in map %1$s. Wilt u ze erheen verplaatsten?
+ Er is niet genoeg ruimte om de bestanden te gekopieëren in map %1$s. Wilt u ze erheen verplaatsten?
Voer App PIN in
Voer App PIN in
De PIN wordt steeds opnieuw gevraagd als de app wordt gestart
@@ -130,6 +143,7 @@
terugpoel knop
Speel of pauze knop
Doorspoel knop
+ Ophalen autorisaties...
Proberen om in te loggen...
Geen netwerkverbinding
Veilige verbinding niet beschikbaar.
@@ -158,11 +172,14 @@
Verbinden met authenticatieserver...
De server ondersteunt deze authenticatiemethode niet
%1$s ondersteunt het gebruik van meerdere accounts niet
+ Uw server geeft geen goede userid terug, neem contact op met uw beheerder
+
+ Kan niet authenticeren tegen deze server
Houd bestand actueel
Hernoemen
Verwijderen
- Wilt je werkelijk %1$s verwijderen?
- Wil je echt %1$s ende inhoud daarvan verwijderen ?
+ Wilt u %1$s werkelijk verwijderen?
+ Wilt u %1$s en de inhoud ervan werkelijk verwijderen?
Alleen lokaal
Alleen lokale inhoud
Verwijder van server
@@ -175,9 +192,12 @@
Extern bestand kon niet worden gecontroleerd
Bestandsinhoud is al gesynchroniseerd
Map kon niet worden aangemaakt
+ Verboden tekens: / \\ < > : \" | ? *
+ Bestandsnaam mag niet leeg zijn
Even geduld
Onverwacht probleem; probeer een andere app om het bestand te selecteren
Er werd geen bestand geselecteerd
+ Verstuur link naar ...
Inloggen met oAuth2
Verbinden met oAuth2-server.
De identiteit van de site kan niet worden gecontroleerd
@@ -202,6 +222,8 @@
Aan:
Handtekening:
Algoritme:
+ Het certificaat kon niet worden getoond.
+ - Geen informatie over de fout
Dit is een plaatshouder
plaatshouder.txt
PNG Afbeelding
@@ -209,6 +231,7 @@
2012/05/18 12:23
12:23:45
Upload afbeeldingen alleen via WiFi
+ Upload video\'s alleen over wifi
/InstantUpload
Update conflict
Het remote bestand %s is niet gesynchroniseerd met het lokale bestand. Als je doorgaat wordt de inhoud van het bestand op de server vervangen.
@@ -216,17 +239,49 @@
Overschrijven
Niet uploaden
Afbeelding voorbeeld
- Deze afbeelding kan niet weergegeven worden
+ Deze afbeelding kan niet worden getoond
%1$s kon niet worden gekopieerd naar de %2$s lokale map
- Mislukte Directe Upload
- Mislukte directe uploads
- Samenvatting van alle mislukte directe uploads
- alles selecteren
- opnieuw proberen alles te selecteren
- verwijderen alle geselecteerde van de upload wachtrij
- probeer de afbeelding opnieuw te uploaden:
- Laadt meer Afbeeldingen
- doe niks, u bent niet online voor directe upload
- Mislukkings Bericht:
- Controleer uw server instellingen, misschien is uw quota overschreden.
+ Upload pad
+ Sorry, delen is niet mogelijk op uw server. Neem contact op met uw
+ beheerder.
+ Kan dit niet delen. Controleer of dit bestand wel bestaat.
+ Er trad een fout op bij uw poging dit bestand of deze map te delen
+ Kan delen niet beëindigen. Ga na of het bestand bestaat
+ Er trad een fout op bij uw poging het delen van dit bestand of deze map te beëindigen
+ Versturen
+ Link kopiëren
+ Gekopieerd naar het klembord
+ Kritieke fout: kan de acties niet uitvoeren
+ Er trad een fout op bij het verbinden met de server.
+ Er trad een fout op bij het wachten op de server, de verwerking kon niet plaatsvinden
+ Er trad een fout op bij het wachten op de server, de verwerking kon niet plaatsvinden
+ De verwerking kon niet plaatsvinden, de server is niet beschikbaar
+
+ U mist autorisatie %s
+ om dit bestand te hernoemen
+ om dit bestand te verwijderen
+ om dit bestand te delen
+ om dit bestand niet meer te delen
+ om dit bestand te creëren
+ om dit bestand in deze map te uploaden
+ Dit bestand is niet langer beschikbaar op de server
+ Accounts
+ Toevoegen account
+ De beveiligde verbinding is omgeleid naar een onveilige route.
+ Logs
+ Verstuur geschiedenis
+ ownCloud Android app logs
+ Laden data...
+ Authenticatie vereist
+ Onjuist wachtwoord
+ verplaatsen
+ Niets hier. U kunt een map toevoegen!
+ Kies
+ Kan niet verplaatsen. Ga na of het bestand wel bestaat
+ De map kan niet naar een onderliggende map worden verplaatst
+ Het bestand bestaat al in de doelmap
+ Er trad een fout op bij uw poging dit bestand of deze map te verplaatsen
+ om dit bestand te verplaatsen
+ Directe uploads
+ Beveiliging
diff --git a/res/values-nn-rNO/strings.xml b/res/values-nn-rNO/strings.xml
index 12eba28785..528bff4fcc 100644
--- a/res/values-nn-rNO/strings.xml
+++ b/res/values-nn-rNO/strings.xml
@@ -1,34 +1,57 @@
+ %1$s Android-program
+ utgåve %1$s
+ Oppdater konto
Last opp
Innhald frå andre program
Filer
- Opprett mappe
+ Opna med
+ Ny mappe
Innstillingar
+ Detaljar
+ Send
Generelt
Meir
Kontoar
- Last opp kamerabilete med ein gong du tek dei
+ Behandle kontoar
+ Programpinkode
+ Beskytt klienten din
+ Last opp bilete omgåande
+ Last opp bilete når du tek dei med kameraet
+ Last opp film
+ Last opp film med ein gong du tar dei med kameraet
+ Skru på logging
+ Brukt til å logga problem
+ Logghistorikk
+ Dette viser loggane som er ført
+ Slett historikk
Hjelp
+ Anbefal til ein ven
+ Tilbakemelding
Impressum
- Tenaradresse
+ Prøv %1$s på smarttelefonen din!
+ Tenaradresse https://
Brukarnamn
Passord
Filer
Kopla til
Last opp
Fann ingen konto
+ Det er ingen %1$s kontoar på eininga di. Gjer vel å konfigurer ein konto først.
Oppsett
Avslutt
Inga innhald å lasta opp
Mottok ikkje noko innhald. Ingenting å lasta opp.
Lastar opp
+ Ingenting her. Last noko opp!
Trykk på ei fil for å visa meir informasjon.
Storleik:
Type:
Oppretta:
Endra:
Last ned
+ Del lenkje
Ja
Nei
Greitt
@@ -37,6 +60,7 @@
Avbryt
Lagra & avslutt
Feil
+ Ukjend feil
Om
Endra passord
Slett konto
@@ -46,21 +70,35 @@
Lastar opp …
%1$d%% lastar opp %2$s
Opplasting fullført
+ %1$s vart lasta opp vellukka
Feil ved opplasting
Klarte ikkje å lasta %1$s ferdig opp
Lastar ned …
%1$d%% lastar ned %2$s
+ Nedlasting vellukka
+ %1$s vart lasta ned vellukka
Feil ved nedlasting
Klarte ikkje å lasta %1$s ferdig ned
Vel konto
Feil ved synkronisering
Klarte ikkje å synkronisera ferdig %1$s
Ver venleg og skriv inn programpinkoden
+ Skriv inn programpinkoden
+ Ver venleg å skriv inn programpinkoden på nytt
+ Fjern programpinkoden
+ Programpinkodane er ikkje like
+ Feil programpinkode
+ Programpinkode er fjerna
+ Programpinkode er lagra
+ Prøvar å logge på...
Inga nettilkopling
Trygg tilkopling ikkje tilgjengeleg.
Tilkopling oppretta
+ Testar tilkopling...
+ Ugyldig tenarkonfigurasjon
Ein ukjend feil oppstod!
Klarte ikkje å finna tenaren
+ Tenarinstans vart ikkje funnen
Tenaren brukte for lang tid på å svara
Ugyldig URL
Feil ved SSL-oppstart
@@ -69,12 +107,14 @@
Hald fila oppdatert
Endra namn
Fjern
- Vil du verkeleg fjerna %1$s?
Berre lokalt
Fjern frå tenaren
+ Ekstern og lokal
+ Fjerning vellukka
+ Fjerning mislukka
Klarte ikkje å fullføra omdøyping
- Klarte ikkje å oppretta mappa
Vent litt
+ Uventa problem ; ver venleg å vel fila frå ein annan app
Inga fil valt
Klarte ikkje å stadfesta identiteten til nettstaden
– Tenarsertifikatet er ikkje klarert
@@ -82,5 +122,12 @@
– URL-en stemmer ikkje med tenarnamnet i sertifikatet
Vil du stola på dette sertifikatet uansett?
Klarte ikkje å lagra sertifikatet
+ Detaljar
Berre last opp bilete over WiFi
+ Send
+
+ Kontoar
+ Feil passord
+ Vel
+ Tryggleik
diff --git a/res/values-oc/strings.xml b/res/values-oc/strings.xml
index 9bdc96983c..84ca498136 100644
--- a/res/values-oc/strings.xml
+++ b/res/values-oc/strings.xml
@@ -2,7 +2,6 @@
Amontcarga
Fichièrs
- Crea un repertòri
Configuracion
General
Mai d\'aquò
@@ -18,6 +17,7 @@
Configuracion
Quita
Al amontcargar
+ Pas res dedins. Amontcarga qualquaren
Talha :
Tipe :
Creat :
@@ -34,10 +34,12 @@
Escafa lo compte
Crea un compte
Avalcarga dempuèi ...
- Nom de repertòri
Al avalcargar ...
Capitada d\'avalcargar
CausÃs lo compte
Dintras ton PIN d\'App, se te plai
Torna nomenar
+
+ Comptes
+ CausÃs
diff --git a/res/values-or-rIN/strings.xml b/res/values-or-rIN/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-or-rIN/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 7d9f60a67e..dc0b9e78fc 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -7,22 +7,20 @@
ਹੋਰ à¨à¨ªà¨¸ ਤੋਂ ਸਮੱਗਰੀ
ਫਾਇਲਾਂ
ਇਸ ਨਾਲ ਖੋਲà©à¨¹à©‹
- ਡਾਇਰੈਕਟਰੀ ਬਣਾਓ
ਸੈਟਿੰਗ
ਵੇਰਵ
+ à¨à©‡à¨œà©‹
ਆਮ
ਅਕਾਊਂਟ
ਲਾਗ ਰੱਖਣਾ ਚਾਲੂ
ਲਾਗ ਰੱਖਣ ਅਤੀਤ
ਅਤੀਤ ਹਟਆਓ
- ਸਰਵਰ à¨à¨¡à¨°à©ˆà¨¸
ਯੂਜ਼ਰ-ਨਾਂ
ਪਾਸਵਰ
%1$s ਲਈ ਨਵੇਂ ਹੋ?
ਫਾਇਲਾਂ
ਕà©à¨¨à©ˆà¨•à¨Ÿ
ਅੱਪਲੋਡ
- ਅੱਪਲੋਡ ਡਾਇਰੈਕਟਰੀ ਚà©à¨£à©‹:
ਕੋਈ ਅਕਾਊਂਟ ਨਹੀਂ ਲੱà¨à¨¾
ਸੈਟਅੱਪ
ਬਾਹਰ
@@ -51,7 +49,6 @@
ਅਕਾਊਂਟ ਹਟਾਓ
ਅਕਾਊਂਟ ਬਣਾਓ
... ਤੋਂ ਅੱਪਲੋਡ
- ਡਾਇਰੈਕਟਰੀ ਨਾਂ
... ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ
%1$d%% ਅੱਪਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ %2$s
ਅੱਪਲੋਡ ਸਫ਼ਲ ਹੈ
@@ -87,11 +84,9 @@
ਫਾਇਲ ਨੂੰ ਅੱਪ ਟੂ ਡੇਟ ਰੱਖੋ
ਨਾਂ ਬਦਲੋ
ਹਟਾਓ
- ਕੀ ਤà©à¨¸à©€à¨‚ %1$s ਨੂੰ ਹਟਾਉਣਾ ਚਾਹà©à©°à¨¦à©‡ ਹੋ?
ਕੇਵਲ ਲੋਕਲ
ਸਰਵਰ ਤੋਂ ਹਟਾਓ
ਰਿਮੋਟ ਤੇ ਲੋਕਲ
- ਡਾਇਰੈਕਟਰੀ ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕੀ
ਪਲ਼ à¨à¨° ਲਈ ਉਡੀਕੋ
ਕੋਈ ਫਾਇਲ ਨਹੀਂ ਚà©à¨£à©€ ਗਈ
ਇਹ ਸਾਈਟ ਦੀ ਪਛਾਣ ਦੀ ਜਾਂਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ ਹੈ
@@ -121,5 +116,8 @@
ਉੱਤੇ ਲਿਖੋ
ਅੱਪਲੋਡ ਨਾ ਕਰੋ
ਚਿੱਤਰ à¨à¨²à¨•
- ਸਠਚà©à¨£à©‹
+ à¨à©‡à¨œà©‹
+
+ ਅਕਾਊਂਟ
+ ਚà©à¨£à©‹
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index e4b5ce8cb4..8c0a98787d 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -4,22 +4,25 @@
wersja %1$s
Odśwież konto
Wyślij plik
- Zasoby innych aplikacji
+ Zawartość z innych aplikacji
Pliki
Otwórz za pomocą
- Nowy katalog
+ Nowy folder
Ustawienia
Szczegóły
+ Wyślij
Ogólne
Więcej
Konta
ZarzÄ…dzaj kontami
PIN aplikacji
- Chroń klienta
- Włącz natychmiastowe wysyłanie
- Natychmiast wysyłaj zdjęcia zrobione aparatem
+ Chroń swojego klienta
+ natychmiastowa wysyłka obrazków
+ Wysyłaj od razu zdjęcia zrobione aparatem
+ Natychmiastowa wysyłka wideo
+ Wysyłaj od razu filmy nakręcone aparatem
WÅ‚Ä…czone Logi
- To jest używane do logów problemów
+ To jest używane do logowania problemów
Zapisuj historiÄ™
To pokazuje zapisane logi
Usuń histrorię
@@ -28,9 +31,9 @@
Wsparcie
Stopka
Wypróbuj %1$s na swoim smartphonie!
- Chcę was zaprosić do korzystania z %1$ s na twoim smartfonie!\nPobierz tutaj: %2$s
+ Chciałbym zaprosić Cię do używania %1$s na swoim smartfonie!\nŚciągnij tutaj: %2$s
Sprawdź serwer
- Adres Serwera
+ Adres serwera https://...
Nazwa użytkownika
Hasło
Nowe %1$s?
@@ -46,7 +49,9 @@
Nie otrzymano danych. Nie ma nic do wysłania.
%1$s nie ma dostępu do udostępnionych treści
Wysyłanie
- Nie ma plików w tym katalogu.⎠Nowe pliki można dodać wybierając w menu Wyślij.
+ Pusto. Wyślij coś!
+ Åadowanie...
+ Nie ma plików w tym folderze.
Dotknij plik aby wyświetlić dodatkowe informacje
Rozmiar:
Typ:
@@ -55,6 +60,8 @@
Pobierz
Odśwież plik
Podczas wysyłania nazwa pliku została zmieniona na %1$s
+ Udostępnij link
+ Anuluj udostępnianie
Tak
Nie
OK
@@ -70,37 +77,40 @@
Usuń konto
Utwórz konto
Wyślij plik z …
- Nazwa katalogu
+ Nazwa folderu
Wysyłam…
%1$d%% Wysyłanie %2$s
Wysyłanie zakończone powodzeniem
Wysyłanie %1$s zakończone sukcesem
Wysyłanie nie powiodło się
Wysyłanie %1$s nie powiodło się
+ Przesyłanie nie powiodło się, musisz się ponownie zalogować
Pobieranie …
%1$d%% Pobieranie %2$s
Pobieranie zakończone
Pobrano %1$s plików
Pobieranie nieudane
Pobieranie %1$s nie powiodło się
- Nie poprane jeszcze
+ Jeszcze nie pobrane
+ Ściganie nie powiodło się, musisz się ponownie zalogować
Wybierz konto
BÅ‚Ä…d synchronizacji
- Nie można było ukończyć synchronizacji %1$s
+ Synchronizacja nie powiodła się, musisz się zalogować ponownie
+ Nie można było dokończyć synchronizacji %1$s
Niepoprawne hasło dla %1$s
Znaleziono konflikty
%1$d synchronizowanych plików nie może zostać zsynchronizowanych
Synchronizacja plików nie powiodła się
Zawartość %1$d plików nie może zostać synchronizowana (%2$d konfliktów)
Niektóre lokalne pliki zostały zgubione.
- %1$d plików z %2$s katalogu nie może zostać skopiowana do niego
- \"W wersji 1.3.16, pliki załadowane z tego urządzenia są skopiowane do lokalnego folderu %1$s aby zapobiec utracie danych, gdy pojedynczy plik jest synchronizowany z kilku kont.⎠⎠Ze zwględu na tą zmianę, wszystkie pliki załadowane w poprzedniej wersji tej aplikacji były kopiowane do folderu %2$s. Jednakże błąd podczas synchronizacji spowodował przerwanie procesu. Możesz zostawić plik(i) i usunąć link do %3$s, lub przenieść plik(i) to katalogu %1$s i zostawić link do %4$s.⎠⎠Lista poniżej zawiera lokalne i zdalne pliki, które są podlinkowane do %5$s.
+ %1$d plików z folderu %2$s nie udało się się przekopiować
+ Od wersji 1.3.16, pliki wysyłane z tego urządzenia są kopiowane do lokalnego folderu %1$s aby zapobiec utracie danych gdy pojedynczy plik jest synchronizowany z wieloma kontami.\n\nZ powodu tej zmiany, wszystkie pliki wysłane za pomocą poprzedniej wersji tej aplikacji były kopiowane do folderu %2$s. Jednakże, błąd uniemożliwiał dokończenie tej operacji podczas synchronizacji konta. Możesz albo pozostawić plik(i) tak jak jest i usunąć link do %3$s lub przenieść plik(i) do folderu %1$s i pozostawić link do %4$s.\n\nPoniżej plik(i) lokalny i plik(i) zdalny w %5$s, do którego zostały zlinkowane.
Folder %1$s nie istnieje.
PrzenieÅ› wszystko
Wszystkie pliki zostały przeniesione
Niektóre pliki nie mogły być przeniesione
- Lokalna ścieżka: %1$s
- Zdalna ścieżka: %1$s
+ Lokalnie: %1$s
+ Zdalnie: %1$s
Nie ma wystarczająco miejśca, aby skopiować zaznaczone pliki do folderu %1$s. Chciałbyś je przenieść?
Podaj PIN aplikacji
Wpisz PIN aplikacji
@@ -112,8 +122,8 @@
Usunięto PIN aplikacji
Zapisano PIN aplikacji
%1$s odtwarzacz muzyki
- %1$s (odtwarzane)
- %1$s (wczytywane)
+ %1$s (odtwarzany)
+ %1$s (wczytywany)
%1$s odtwarzanie zakończone
Nie znaleziono plików multimedialnych
Nie znaleziono konta
@@ -122,7 +132,7 @@
BÅ‚Ä…d odczytu pliku multimedialnego
BÅ‚Ä…d kodowania pliku multimedialnego
Upłynął limit czasu podczas próby odtwarzania
- Ni udało się przesłać pliku multimedialnego
+ Plik mediów nie może być przesyłany strumieniowo
Plik multimediów nie może być odtworzony we wbudowanym odtwarzaczu
Błąd zabezpieczeń podczas próby odtworzenia %1$s
Błąd wprowadzania podczas próby odtworzenia %1$s
@@ -130,6 +140,7 @@
Przycisk przewijania
Przycisk odtwarzania / pauzowania
Przycisk przewijania do przodu
+ Pobieram autoryzacjÄ™...
Próbuję się zalogować...
Brak połączenia sieciowego
Nie można nawiązać bezpiecznego połączenia.
@@ -157,12 +168,15 @@
Twoja sesja wygasła. Proszę zaloguj się ponownie
ÅÄ…czenie z serwerem autoryzacji...
Serwer nie obsługuje tej metody autoryzacji
- %1$s nie wspiera multikont
+ %1$s nie wspiera wielu kont
+ Twój serwer nie zwraca prawidłowego id użytkownika, proszę skontaktuj się z administratorem
+
+ Nie można autoryzować przy użyciu tego serwera
Automatyczne aktualizuj plik
Zmień nazwę
Usuń
- Czy na pewno chcesz usunąć %1$s ?
- Czy usunąć %1$s oraz jego zawartość?
+ Czy naprawdę chcesz usunąć %1$s?
+ Czy naprawdę chcesz usunąć %1$s i jego zawartość?
Tylko lokalnie
Tylko zasoby lokalne
Usuń z serwera
@@ -174,10 +188,13 @@
Zmiana nazwy nie powiodła się
Nie można sprawdzić zdalnego pliku
Zawartość pliku została już synchronizowana
- Nie można utworzyć katalogu
+ Folder nie może zostać utworzony
+ Znaki zabronione: / \\ < > : \" | ? *
+ Nazwa pliku nie może być pusta.
Poczekaj chwilÄ™
Nieoczekiwany problem; spróbuj wybrać plik z innej aplikacji
Nie wybrano żadnych plików
+ Wyślij link do ...
Loguj przez oAuth2
ÅÄ…czenie z serwerem oAuth2...
Nie można zweryfikować tożsamości strony
@@ -202,6 +219,8 @@
Do:
Sygnatura:
Algorytm:
+ Nie można wyświetlić certyfikatu.
+ - Brak informacji o błędzie
Tekst zastępczy
placeholder.txt
Obraz PNG
@@ -209,6 +228,7 @@
2012/05/18 12:23 PM
12:23:45
Wysyłaj zdjęcia tylko przez WiFi
+ Aktualizuj filmy tylko przez WiFi
/InstantUpload
Konflikt aktualizacji
Zdalny plik %s nie jest zsynchronizowany z plikiem lokalnym. Kontynuując zastąpisz zawartość pliku na serwerze.
@@ -216,17 +236,45 @@
ZastÄ…p
Nie wysyłaj
PodglÄ…d
- Obraz nie może zostać wyświetlony
- %1$s nie może zostać skopiowany do lokalnego %2$s katalogu
- Autoprzesyłanie nieudane\"
- Błąd automatycznego przesyłania
- Podsumowanie wszystkich nieudanych transferów
- zaznacz wszystkie
- spróbuj zaznaczyć wszystkie
- usuń wszystko z kolejki wysyłania
- ponów wysyłanie obrazu:
- Wczytaj więcej obrazów
- nic nie rób, ponieważ nie jesteś online, nie możesz przesyłać plików
- Komunikat błędu:
- Proszę sprawdź ustawienia serwera, możliwe że przekroczyłes limit wielkości pliku
+ Ten obrazek nie może zostać wyświetlony
+ %1$s nie może zostać skopiowany do lokalnego folderu %2$s
+ Przepraszamy, ale współdzielenie nie jest włączone na Twoim serwerze. Proszę skontaktuj się z
+ administratorem.
+ Nie można udostępnić. Proszę sprawdzić, czy plik istnieje
+ Wystąpił błąd podczas udostępniania tego pliku lub folderu.
+ Nie można wyłączyć udostępniania. Proszę sprawdzić, czy plik istnieje
+ Wystąpił błąd podczas anulowania udostępniania tego pliku lub folderu.
+ Wyślij
+ Skopiuj link
+ Skopiuj do schowka
+ Błąd krytyczny: nie można wykonać operacji
+ Pojawił się błąd podczas łączenia z serwerem.
+ Pojawił się błąd podczas oczekiwania na serwer, operacja nie mogła zostać wykonana
+ Pojawił się błąd podczas oczekiwania na serwer, operacja nie mogła zostać wykonana
+ Nie można dokończyć operacji, serwer jest niedostępny
+
+ Nie masz uprawnień %s
+ do zmiany nazwy tego pliku
+ do usuwania tego pliku
+ do współdzielenia tego pliku
+ do zniesienia współdzielenia tego pliku
+ do utworzenia tego pliku
+ do wgrania tego folderu
+ Ten plik nie jest już dostępny na serwerze
+ Konta
+ Dodaj konto
+ Logi
+ Wyślij historię
+ ÅadujÄ™ dane...
+ Wymagana autoryzacja
+ Złe hasło
+ PrzenieÅ›
+ Nic tu nie ma. Możesz dodać folder!
+ Wybierz
+ Nie można przenieść. Proszę sprawdzić, czy plik istnieje
+ Nie jest możliwe przeniesienie folderu do potomka
+ Plik istnieje już w folderze docelowym
+ Pojawił się błąd podczas próby przeniesienia tego pliku lub folderu
+ aby przenieść ten plik
+ Bezpieczeństwo
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index ed892d7cd7..3ffb84b83f 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -3,24 +3,27 @@
%1$s Android App
versão %1$s
Atualização de conta
- Upload
+ Enviar
Conteúdo de outros apps
Arquivos
Abrir com
- Criar pasta
- Ajustes
+ Nova pasta
+ Configurações
Detalhes
+ Enviar
Geral
Mais
Contas
- Gerenciar contas
+ Gerenciar Contas
PIN App
Proteja seu cliente
- Habilitar upload instantâneo
- Instantaneamente faça upload das fotos tiradas pela câmera
- Habilitar conexão
- Isto é usado para registrar os problemas
- História de Registro
+ Envio instantâneo de imagem
+ Enviar instantaneamente fotos tiradas com a camera
+ Envio instantâneo de vÃdeos
+ Enviar instantaneamente vÃdeos feitos com a camera
+ Habilitar Conexão
+ Isto é usado para registrar(log) os problemas
+ História de Registro(log)
Isso mostra os registros gravados
Excluir Histórico
Ajuda
@@ -28,38 +31,42 @@
Feedback
Imprint
Tentar %1$s em seu smartfone!
- Gostaria de lhe convidar para usar %1$s em seu smartfone!\nBaixe aqui: %2$s
+ Gostaria de convida-lo a usar %1$s em seu smartphone!\nBaixe aqui: %2$s
Verificar Servidor
- Endereço do servidor
+ Endereço do servidor https://...
Nome de usuário
Senha
Novo para %1$s?
Arquivos
Conectar
- Upload
+ Enviar
Escolher pasta para enviar:
Nenhuma conta encontrada
Não existem contas %1$s no seu dispositivo. Por favor, configure uma conta primeiro.
Instalação
Sair
- Sem conteúdo para enviar
- Nenhum foi recebido. Nada para enviar.
- %1$s não é permitido a acessar o conteúdo compartilhado
+ Nenhum conteúdo para enviar
+ Nenhum conteúdo foi recebido. Nada para enviar.
+ %1$s não é permitido acessar o conteúdo compartilhado
Enviando
- Não existe arquivos nesta pasta\nNovos arquivos podem ser adicionados com a opção do menu \"Enviar\"
+ Nada aqui. Envie alguma coisa!
+ Carregando...
+ Não existe nenhum arquivo nesta pasta.
Toque em um arquivo para mostrar informações adicionais.
Tamanho:
Tipo:
Criado:
Modificado:
- Download
+ Baixar
Atualizar arquivo
- Arquivo foi renomeado para %1$s durante o upload
+ Arquivo foi renomeado para %1$s durante o envio
+ Compartilhar link
+ Descompartilhar o link
Sim
Não
OK
- Cancelar download
- Cancelar upload
+ Cancelar o download
+ Cancelar envio
Cancelar
Salvar & Sair
Erro
@@ -70,13 +77,14 @@
Remover conta
Criar conta
Enviar de …
- Nome do diretório
+ Nome da pasta
Enviando …
%1$d%% Enviando %2$s
Envio bem sucedido
%1$s foi enviado com sucesso
Falha no envio
- Envio de %1$s não pôde ser completado
+ Envio de %1$s não pôde ser finalizado
+ O envio falhou, você precisa reconectar
Baixando …
%1$d%% Baixando %2$s
Download bem sucedido
@@ -84,8 +92,10 @@
Download falhou
Download de %1$s não pôde ser concluÃdo
Não baixado ainda
+ O download falhou, você precisa reconectar
Escolha a conta
Sincronização falhou
+ A sincronização falhou, você necessita se reconectar
Sincronização de %1$s não pôde ser completada
Senha inválida para %1$s
Conflitos encontrados
@@ -93,15 +103,15 @@
Falha ao manter arquivos sincronizados
O conteúdo de %1$d arquivos não puderam ser sincronizados (%2$d conflitos)
Alguns arquivos locais foram esquecidos
- %1$d arquivos da pasta %2$s não foram copiados
- A partir da versão 1.3.16, os arquivos enviados a partir deste dispositivo são copiados para a pasta local %1$s para evitar a perda de dados quando um único arquivo é sincronizado com várias contas. \n\nDevido a essa mudança, todos os arquivos carregados em versões anteriores deste aplicativo foram copiados para a pasta %2$s. No entanto, um erro evita a conclusão desta operação durante a conta de sincronização. Você pode tanto deixar os arquivos como é e remover o link para %3$s, ou mover o arquivos para o diretório %1$s e manter o link para %4$s. \n\nListados abaixo estão os arquivos locais, e os arquivos remotos em %5$s que estavam vinculados.
+ %1$d arquivos de %2$s não puderam ser copiados para a pasta
+ A partir da versão 1.3.16, os arquivos enviados a partir deste dispositivo são copiados para a pasta local %1$s para evitar a perda de dados quando um único arquivo é sincronizado com várias contas. \n\nDevido a esta mudança, todos os arquivos enviados em versões anteriores deste aplicativo foram copiados para a pasta %2$s . No entanto, um erro impediu a conclusão desta operação durante a sincronização de conta. Você pode tanto deixar os arquivos como são e remover o link para %3$s, ou mover os arquivo(s) para a pasta %1$s e manter o link para %4$s. \n\nListadas abaixo são os arquivo(s) locais, e os arquivo(s) remoto(s) em %5$s que estavam vinculados.
Pasta %1s não existe mais
Mover todos
Todos os arquivos foram movidos
Alguns arquivos não puderam ser movidos
Local: %1$s
Remoto: %1$s
- Não há espaço suficiente para copiar os arquivos selecionados para a pasta %1$s. Ao invés disso, gostaria de movê-los?
+ Não existe espaço suficiente para copiar os arquivos selecionados para a pasta %1$s. Você gostaria de ao invés de copiar movê-los?
Por favor, insira o seu PIN de Aplicativo
Insira seu PIN de Aplicativo
O PIN (senha) será solicitado toda vez que o aplicativo for iniciado
@@ -123,13 +133,14 @@
Arquivo de mÃdia não corretamente codificado
Expirou o tempo durante a tentativa
Arquivo de mÃdia não pode ser transmitido
- Arquivo de mÃdia não pode ser reproduzido com o estoque media player
+ Arquivo de mÃdia não pode ser reproduzido com o stock media player
Erro de segurança tentando reproduzir %1$s
Erro de entrada tentando reproduzir %1$s
Erro inesperado tentando reproduzir %1$s
Botão rebobinar
Botão reproduzir parar
Botão de adiantamento rápido
+ Obtendo autorização...
Tentando fazer login...
Sem conexão de rede
Conexão segura indisponÃvel.
@@ -137,7 +148,7 @@
Testando conexão...
Configuração do servidor mal formada
Uma conta para o mesmo usuário e servidor já existe no dispositivo
- As informações que o usuário digitou não corresponde ao usuário da conta
+ As informações que o usuário digitou não correspondem ao usuário da conta
Ocorreu um erro desconhecido!
Não pôde encontrar host
Instância de servidor não encontrada
@@ -145,7 +156,7 @@
URL mal formada
Inicialização SSL falhou
Não foi possÃvel verificar a identidade do servidor SSL
- Versão do servidor é irreconhecÃvel
+ Versão do servidor desconhecida
Não foi possÃvel estabelecer conexão
Conexão segura estabelecida
Nome de usuário e/ou senha está errada!
@@ -158,11 +169,14 @@
Conectando ao servidor de autenticação ...
O servidor não suporta este método de autenticação
%1$s não suporta múltiplas contas
+ Seu servidor não está retornando um ID de usuário correto, por favor, entre em contato com um administrador
+⇥
+ Não foi possÃvel autenticar neste servidor
Manter arquivo atualizado
Renomear
Remover
- Você realmente quer remover %1$s ?
- Você deseja realmente apagar %1$s e seu conteúdo?
+ Você realmente deseja remover %1$s?
+ Você realmente deseja remover %1$s e seus conteúdos?
Somente local
Somente conteúdo local
Remover do servidor
@@ -170,22 +184,25 @@
Removido com sucesso
Erro ao remover
Digite um novo nome
- Cópia local não pôde ser renomeada, tente outro nome
- Renomeação não pôde ser completada
+ Cópia local não pôde ser renomeada; tente outro nome
+ Renomeação não pôde ser finalizada
Arquivo remoto não pode ser verificado
Conteúdo do arquivo já foi sincronizado
- Diretório não pôde ser criado
+ A pasta não pode ser criada
+ Caracteres proibidos: / \\ < > : \" | ? *
+ O nome do arquivo não pode estar vazio
Aguarde um momento
Problema inesperado; por favor, tente selecionar o arquivo com outro app
Nenhum arquivo foi selecionado
+ Enviar o link para
Login com oAuth2
Conectando-se a oAuth2 servidor ...
A identidade do site não pode ser verificada
- O certificado do servidor não é confiável
- O certificado do servidor expirou
- - O certificado do servidor é muito recente
+ - O datas de validade do certificado do servidor estão no futuro
- O URL do host não confere com o host do certificado
- Você confia nesse certificado mesmo assim?
+ Você mesmo assim confia nesse certificado?
O certificado não pode ser salvo
Detalhes
Ocultar
@@ -202,31 +219,66 @@
Para:
Assinatura:
Algoritmo:
+ O certificado não pode ser mostrado.
+ - Nenhuma informação sobre o erro
Este é um espaço reservado
espaçoreservado.txt
Imagem PNG
389 KB
2012/05/18 12:23 PM
12:23:45
- Fazer upload de fotos somente via WiFi
+ Fazer envio de fotos somente via WiFi
+ Enviar vÃdeos somente via WiFi
/Upload instantâneo
Conflito de atualização
- O arquivo remoto %s não está soncronizado com o arquivo local. Prosseguir irá substituir o arquivo no servidor.
+ O arquivo remoto %s não está sincronizado com o arquivo local. Prosseguir irá substituir o arquivo no servidor.
Manter ambos
Sobrescrever
- Não fazer upload
+ Não enviar
Pré-visualização da imagem
Esta imagem não pode ser mostrada
- %1$s não pode ser copiado a pasta local %2$s
- Falha no envio imediato
- Falhas nos envios imediatos
- Sumario de todas as falhas nos envios imediatos
- selecionar tudo
- tentar novamente todos os selecionados
- excluir todos os selecionados da lista de envio
- tentar novamente envio da imagem:
- Carregar mais Imagens
- não fazer nada voce não está conectado para envio instantâneo
- Mensagem de Falha:
- Por favor verifique a configuração do servidor, talvez a sua cota esteja vencida.
+ %1$s não pôde ser copiado para pasta local %2$s
+ Enviar Caminho
+ Desculpe, o compartilhamento não está habilitado em seu servidor. Entre em contato com seu
+⇥⇥ administrador.
+ Não é possÃvel compartilhar. Por favor verifique se o arquivo existe
+ Ocorreu um erro durante a tentativa de compartilhar esse arquivo ou pasta
+ Não é possÃvel cancelar o compartilhamento. Por favor verifique se o arquivo existe
+ Ocorreu um erro ao tentar descompartilhar este arquivo ou pasta
+ Enviar
+ Copiar o link
+ Copiado para área de transferência
+ Erro crÃtico: não pode executar operações
+ Ocorreu um erro durante a conexão com o servidor.
+ Ocorreu um erro enquanto se espera pelo servidor, a operação não poderia ter sido executada
+ Ocorreu um erro enquanto se espera pelo servidor, a operação não poderia ter sido executada
+ A operação não pôde ser concluÃda, o servidor está indisponÃvel
+
+ Você não tem premissão %s
+ para renomear este arquivo
+ para excluir este arquivo
+ para compartilhar este arquivo
+ para descompartilhar este arquivo
+ para criar este arquivo
+ para enviar para esta pasta
+ Este arquivo não mais está disponÃvel neste servidor
+ Contas
+ Adicionar uma conta
+ Conexão segura esta redirecionada para uma rota não segura.
+ Logs
+ Enviar Histórico
+ Logs do aplicativo ownCloud Android
+ Carregamento de dados...
+ Autenticação é requerida
+ Senha incorreta
+ Mover
+ Nada aqui. Você pode adicionar uma pasta!
+ Escolher
+ Não é possÃvel mover. Por favor verifique se o arquivo existe
+ Não é possÃvel mover a pasta para uma descendente
+ O arquivo já existe na pasta de destino
+ Ocorreu um erro ao tentar mover este arquivo ou pasta
+ mover este arquivo
+ Envios Instantâneos
+ Segurança
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 514e60c9e6..6c4aab17de 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -2,39 +2,45 @@
%1$s Aplicação(ões) Android
versão %1$s
- Recarregar a conta
+ Actualizar
Enviar
Conteúdo das outras apps
Ficheiros
Abrir com
- Criar pasta
+ Nova Pasta
Definições
Detalhes
+ Enviar
Geral
Mais
Contas
Gerir contas
App PIN
Proteja o seu cliente
- Activar envio instantâneo
- Enviar automaticamente as fotografias tiradas pela camera
+ Transferência instantânea de imagens
+ Transferência instantânea de imagens tiradas com câmara
+ Envios instantâneos dos vÃdeos
+ Carregamento instantâneo de vÃdeos registados com a camera
Ativar Rastreio
Isto é usado para registar problemas
Historico do rastreio
Isto mostra os registos guardados
Eliminar Histórico
Ajuda
+ Recomendar a um amigo
Resposta
Imprint
+ Experimente %1$s no seu smartphone!
+ Quero convidar-te a usares %1$s no teu smartphone!\nFaz download aqui: %2$s
Verificar Servidor
- Endereço do servidor
+ Endereço do servidor https://..
Nome de Utilizador
Palavra-passe
Novo em %1$s?
Ficheiros
Ligar
Enviar
- Escolha a directoria do upload:
+ Escolha a pasta de envio:
Nenhuma conta encontrada
Não tem nenhuma conta %1$s no seu dispositivo. Configure uma conta.
Configurar
@@ -43,7 +49,9 @@
Não foi recebido nenhum conteúdo. Nada para enviar.
O %1$s não está autorizado a aceder aos ficheiro partilhados.
A enviar
- Não existem ficheiros nesta pasta.\nPode adicionar ficheiros com a opção \"Enviar\" no menu.
+ Vazio. Envie alguma coisa!
+ A carregar...
+ Não existem ficheiros nesta pasta.
Clique no ficheiro para visualizar informação adicional.
Tamanho:
Tipo:
@@ -52,6 +60,8 @@
Descarregar
Atualizar ficheiro
O nome do ficheiro foi alterado para %1$s durante o envio.
+ Partilhar o link
+ Deixar de partilhar a ligação
Sim
Não
OK
@@ -67,13 +77,14 @@
Apagar conta
Criar conta
Carregar de...
- Nome da directoria
+ Nome da pasta
A carregar...
A enviar %1$d%% , %2$s completo.
Carregado com sucesso
%1$s foi carregado com sucesso
Carregamento falhou
O envio do ficheiro %1$s não foi concluÃdo.
+ Falha no carregamento, é necessário fazer novo login
A descarregar...
%1$d%% A decarregar %2$s
Descarga com sucesso
@@ -81,8 +92,10 @@
Descarga falhou
O descarregamento %1$s não foi possÃvel descarregar
Não transferido
+ Falha no download, é necessário fazer login
Escolha a conta
Falhou a sincronização
+ Falhou a sincronização, necessita fazer um novo login
Não foi possÃvel sincronizar %1$s
Password inválida para %1$s
Foram encontrados conflitos
@@ -90,14 +103,15 @@
Falhou a operação de manter os ficheiros sincronizados
Não foi possÃvel sincronizar o conteúdo de %1$d ficheiros (%2$d conflictos)
Alguns ficheiros locais ficaram esquecidos
- %1$d ficheiros da directoria %2$s não foram copiados
- Com a versão 1.3.16, os ficheiros que foram enviados deste dispositivo foram copiados para a pasta local %1$s para prevenir perda de dados quando um ficheiro está partilhado com várias contas.\nDevido a esta alteração, todos os ficheiros e as suas versões foram copiados para a pasta %2$s. Contudo, um erro não deixou concluÃr este processo durante a sincronização da conta. Pode deixar o ficheiro(s) como está(ão) e remover o link para %3$s, ou mover o(s) ficheiro(s) para a pasta %1$s e guardar o link para %4$s.\n\nEm baixo está(ão) listados o(s) ficheiro(s) locais e remotos em %5$s que foram ligados.
+ Nao foi possivel copiar os ficheiros %1$d da pasta %2$s para
+ Tal como na versão 1.3.16, os ficheiros que foram enviados deste dispositivo são copiados para a pasta local %1$s para prevenir perda de dados quando um ficheiro é partilhado com várias contas.\n\nDevido a esta alteração, todos os ficheiros das versões anteriores foram copiados para a pasta %2$s. No entanto, um erro impediu a conclusão deste processo durante a sincronização da conta. Pode deixar o ficheiro(s) como estão e remover o link para %3$s, ou mover o(s) ficheiro(s) para a pasta %1$s e guardar o link para %4$s. \n\nEm baixo estão listados ficheiro(s) locais e remotos em %5$s que foram ligados.
+ A pasta %1$s já não existe
Mover Todos
Todos os ficheiros foram movidos
Não foi possÃvel mover alguns ficheiros
Local: %1$s
Remoto: %1$s
- Não existe espaço suficiente para copiar os ficheiros seleccionados para a pasta %1$s . Deseja move-los?
+ Não existe espaço disponÃvel para copiar o ficheiro seleccionado para a pasta %1$s . Em vez disso deseja mover o ficheiro?
Por favor escreva o PIN da Aplicação
Escreva o PIN da Aplicação
O PIN vai ser pedido todas as vezes que iniciar a aplicação.
@@ -117,6 +131,7 @@
Codec de média não suportado
Não foi possÃvel reproduzir o ficheiro
Ficheiro erradamente codificado (codec)
+ O tempo de espera para jogar expirou
O ficheiro não pode ser reproduzido (streaming)
O ficheiro não pode ser reproduzido com o leitor de média de origem
Erro de segurança a tentar reproduzir o ficheiro %1$s
@@ -125,18 +140,22 @@
Botão de rebobinar
Botão Tocar/Pausa
Botão de avanço rápido
+ A obter autorização...
A tentar entrar...
Sem ligação à rede
Ligação segura indisponÃvel
Ligação estabelecida
A testar a ligação...
Configuração do servidor incorrecta.
+ Uma conta para este utilizador e servidor já existe no dispositivo
+ O utilizador que escreveu não coincide com o nome de utilizador desta conta
Ocorreu um erro desconhecido!
Não é possÃvel encontrar o servidor
Instância servidor não encontrada
O servidor levou demasiado tempo a responder
URL errado
Inicialização de SSL falhou
+ Não foi possÃvel verificar a identidade SSL do servidor
Versão do servidor não reconhecida
Não consegue estabelecer ligação
Ligação segura estabelecida
@@ -144,7 +163,14 @@
autorização mal sucedida
Acesso negado pelo servidor
Estado inesperado, por favor, digite a URL do servidor novamente
+ O prazo da sua autorização expirou. Por favor renove-a
Por favor, introduza a password actual
+ A sua sessão expirou. Por favor autentique-se de novo
+ A verificar a sua autenticação no servidor...
+ O servidor não suporta este método de autenticação
+ %1$s não suporta contas múltiplas
+ O seu servidor não transmite o ID correcto. Por favor contacte o administrador.
+ Não foi possÃvel autenticar no servidor
manter ficheiro actualizado
Renomear
Remover
@@ -161,10 +187,14 @@
Não foi possÃvel renomear
Não foi possÃvel verificar o ficheiro remoto
O conteúdo do ficheiro já foi sincronizado
- Não foi possÃvel criar a pasta
+ Não foi possivel criar a pasta
+ Caracteres não permitidos: / \\ < > : \" | ? *
+ O nome do ficheiro não pode ser vazio.
Aguarde um momento
Erro inesperado. Por favor tente outra aplicação para seleccionar o ficheiro.
Não selecionou nenhum ficheiro
+ Enviar a ligação para ...
+ Autenticar-se com oAuth2
A ligar ao servidor oAuth2
Não foi possÃvel verificar a identidade do site.
- O certificado do servidor não é de confiança
@@ -188,6 +218,8 @@
Para:
Assinatura:
Algoritmo
+ O certificado não pôde ser mostrado.
+ - Nenhuma informação acerca do erro
Isto é uma variável.
placeholder.txt
Imagem PNG
@@ -195,6 +227,7 @@
2012/05/18 12:23 PM
12:23:45
Enviar fotografias apenas via WiFi
+ Enviar videos apenas por WiFi
/Upload-Instantâneo
Conflito na actualização
O ficheiro remoto %s não está sincronizado com o ficheiro local. Se continuar ira substituir o ficheiro no servidor.
@@ -204,15 +237,46 @@
Pré-Visualização da imagem
Esta imagem não pode ser mostrada
Não foi possÃvel copiar %1$s para a pasta local %2$s
- Falhou o Upload-Instantâneo\"
- Falharam os Uploads-Instantâneos
- Sumário dos Uploads-Instantâneos falhados
- Seleccionar Todos
- Tentar todos os seleccionados
- Eliminar todos os seleccionados da lista de envio
- Tentar envio da imagem:
- Carregar mais imagens
- não fazer nada, nao está online para o Upload-Instantâneo
- Mensagem de erro:
- Por favor verifique a configuração do servidor, talvez tenha excedido a sua quota
+ Caminho de Upload
+ Lamentamos mas não é possÃvel partilhar através do seu servidor. Por favor contacte o seu administrador.
+ Não é possivel partilhar. Por favor verifique se o ficheiro existe
+ Ocorreu um erro enquanto tentava partilhar este ficheiro ou pasta
+ Não é possÃvel retirar a partilha. Verifique se o ficheiro existe
+ Ocorreu um erro enquanto retirava a partilha deste ficheiro ou pasta
+ Enviar
+ Copiar ligação
+ Copiado para a área de transferência
+ Erro crÃtico: não é possÃvel executar as operações
+ Ocorreu um erro durante a ligação ao servidos.
+ Ocorreu um erro durante a ligação ao servidor, não foi possÃvel realizar a operação.
+ Ocorreu um erro durante a ligação ao servidor, não foi possÃvel realizar a operação.
+ A operação não foi concluÃda, o servidor está inacessÃvel.
+
+ Você não tem permissão %s
+ para renomear este ficheiro
+ para eliminar este ficheiro
+ para partilhar este ficheiro
+ para eliminar a partilha deste ficheiro
+ para criar o ficheiro
+ para carregar dentro desta pasta
+ O ficheiro não está mais disponÃvel no servidor
+ Contas
+ Adicionar conta
+ Ligação segura é redireccionada para um caminho inseguro.
+ Logs
+ Enviar Histórico
+ Logs da app ownCloud Android
+ A carregar os dados...
+ Autenticação necessária
+ Password errada
+ Mover
+ Não está aqui nada. Pode adicionar uma pasta!
+ Escolha
+ Não é possÃvel mover. Verifique se o ficheiro existe
+ Não é possÃvel mover esta pasta deste modo
+ O ficheiro já existe na pasta de destino
+ Um erro ocorreu ao tentar mover este ficheiro ou pasta
+ para mover este ficheiro
+ Uploads Instantâneos
+ Segurança
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index a35bbdc5b9..b3ea72569f 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -1,83 +1,263 @@
+ %1$s Aplicație Android
+ versiunea %1$s
+ Refresh cont
Încarcă
Conținut de la alte aplicații
Fișiere
- Creare director
+ Deschideţi cu
+ Un nou dosar
Setări
+ Detalii
+ Expediază
General
Mai mult
Conturi
Administrare conturi
- Activează încărcarea instant
+ PIN-ul aplicaţiei
+ Protejaţi-vă clientul
+ Încărcare instanta de imagine
+ Încărca instantaneu imagini luate de camera
+ Încărcare instantă de videoclipuri.
+ Încarcă videoclipuri instant, filmate cu camera.
+ Permite logarea
+ Acesta este folosit pentru a înregistra problemele
+ Istoria logarilor
+ Asta arata înregistrările salvate
+ Ştergeţi istoric
Ajutor
- Adresa server-ului
+ Recomandati unui prieten
+ Feedback
+ Imprint
+ Încearcă %1$s pe smartphone-ul tău!
+ Verificaţi Serverul
+ Adresa serverului https://...
Nume utilizator
Parolă
+ Nou la %1$s?
Fișiere
Conectare
Încărcare
+ Alegeţi fişierul pentru încărcare
Nici un cont găsit
Nu există conturi %1$s pe dispozitivul tău. Te rugăm să configurezi un cont mai întâi.
Configurare
Anulare
+ Nu exista conţinut pentru încărcare
+ Nu a fost primit nici un conţinut .Nu exista nimic de încărcat .
+ %1$s nu este permis sa acceseze conținutul shared
Încărcare
+ Nimic aici. Încarcă ceva!
+ Se incarca
+ In acest folder nu sunt fisiere.
+ Selectati un fisier pentru a afisa informatia aditionala
Mărime:
Tip:
Creat:
Modificat:
Descarcă
+ Împrospătare fişier
+ Fișierul a fost redenumit %1$s în timpul încărcării
+ Share link
+ Unshare link
Da
Nu
OK
+ Anulează descărcarea
Anulează încărcarea
Anulare
Salvare & Ieșire
Eroare
+ Se încarcă...
+ Eroare necunoscută
Despre
Schimbă parola
Șterge cont
Crează cont
Încarcă din...
- Nume director
+ Denumire director
În curs de încărcare...
%1$d%% Se încarcă %2$s
Încărcat cu succes
%1$s a fost încărcat cu succes
Încărcarea a eșuat
Încărcarea fișierului %1$s nu a putut fi încheiată
+ Incărcarea a eşuat, trebuie să te logezi din nou
Se descarcă...
%1$d%% Se descarcă %2$s
Descărcarea a reușit
%1$s a fost descărcat cu succes
Descărcarea a eșuat
+ Nu s-a putut face downloadarea completa a %1$s
+ Nu s-a descărcat încă
+ Descărcarea a eşuat, trebuie să te logezi din nou
Alege cont
Sincronizarea a eșuat
+ Sincronizare date a eşuat, trebuie să te logezi din nou
+ Sincronizarea %1$s nu a putut fi completata
+ Parolă greșită pentru %1$s
+ S-au gasit conflicte
+ %1$d file pastrate-in-sync files nu au putut fi sincronizate
+ Pastrarea fisierelor in sync nu a reușit
+ Conținutul a%1$d fișiere nu a putut fi sincronizat (conflicte %2$d)
+ Unele fisiere locale au fost uitate
+ %1$d fisiere din dosarul %2$s nu a putut fi copiat in
+ Folderul %1$s nu mai există
+ Muta tot/toate
+ Toate fiÅŸierele au fost mutate
+ Unele fiÅŸiere nu au putut fi mutate
+ Local: %1$s
+ La distanta: %1$s
+ Nu este suficient spațiu pentru a copia fișierele selectate în dosarul %1$s . Dorești să le muți în loc?
+
Te rugăm să specifici PIN-ul aplicației
+ Introduceti PIN-ul aplicatiei
+ PIN-ul va fi solicitat ori de cate ori aplicaţia este pornita
+ Va rugam , reintroduceti PIN-ul aplicatiei
Elimină PIN-ul aplicației
Cele două PIN-uri ale aplicației nu sunt similare
PIN-ul aplicației este incorect
PIN-ul aplicației a fost eliminat
PIN-ul aplicației a fost memorat
+ %1$s player de muzică
+ %1$s (cântă)
+ %1$s (încarcă)
+ %1$s redare terminată
+ Nu a fost găsit nici un fişier media
+ Nu a fost dat nici un cont
+ Fişierul nu este într-un cont valid
+ Codec media fără suport
+ FiÅŸierul media nu a putut fi citit
+ FiÅŸierul media nu a fost codat corect
+ Timpul a expirat în ce încerca să execute
+ Fișierul media nu poate fi transmis
+ Fișierul media nu poate fi executat cu stock media player
+ Eroare de securitate în timp ce încerca să execute %1$s
+ Eroare de input în timp ce încerca să execute %1$s
+ Eroare neprevăzută în timp ce încerca să execute %1$s
+ Butonul rewind
+ Buton de play sau pauză
+ Butonul pentru repede înainte
+ Obținerea autorizației...
ÃŽn curs de autentificare...
+ Nu exista conexiune
Conexiune securizată indisponibilă
Conexiune stabilită
Se testează conexiunea...
Configurație serverului incorectă
+ Un cont pentru același utilizator și server există deja în dispozitiv
+ Utilizatorul introdus nu se potrivește cu utilizatorul acestui cont
A apărut o eroare necunoscută!
+ Nu a putut gasi host-ul
Instanța serverului nu a fost găsită
+ Server-ului i-a luat prea mult timp sa raspunda
+ URL scris gresit
Inițializarea SSL a eșuat
+ Nu s-a putut verifica identitatea serverului SSL
+ Versiune necunoscuta a serverului
Nu s-a putut stabili conexiunea
Conexiune sigură stabilită
+ Utilizator sau parola greşită
+ Autorizare nereușită
+ Acces refuzat de serverul de autorizare
+ Situație neașteptată, vă rugăm, introduceți din nou URL-ul serverului
+ Autorizarea dvs. a expirat. Vă rugăm să autorizați din nou.
+ Va rugam introduceţi parola curenta
+ Sesiunea a expirat .Va rugam conectati-va din nou
+ Se conectează la serverul de autentificare...
+ Serverul nu soporta aceasta metoda de autentificare
+ %1$s nu suporta conturi multiple
+ Server-ul dvs. nu întoarce un ID de utilizator corect, vă rugăm să contactați un administrator
+ Nu se poate autentifica cu acest server
Păstrează fișierul actualizat
Redenumește
Elimină
- Sigur dorești să elimini %1$s ?
+ Doriti sigur sa stergeti %1$s?
+ Sigur vrei să elimini %1$s și conținutul său?
Doar local
+ Doar continut local
Elimină de pe server
+ De la distanță și local
Eliminat cu succes
Eliminarea nu a reușit
- Directorul nu a putut fi creat
+ Introduceţi un nou nume
+ Copia locala nu a putut fi renumita; incearca un nume diferit
+ Redenumirea nu s-a putut realiza
+ Fisierul de la distanta nu a putut fi verificat
+ Continutul fisierului este deja sincronizat
+ Nu a putut fi creat directorul
+ Caractere interzise: / \\ < > : \" | ? *
+ Numele fișierului nu poate fi gol.
Așteaptă un moment
+ Problema neasteptata ; selectati fisierul dintr-o aplicatie diferita
Nu a fost selectat nici un fișier
+ Trimite link la ...
+ Întră în cont cu oAuth2
+ Se conectează la serverul oAuth2...
+ Nu s-a putut verifica identitatea site-ului
+ Certificatul serverului nu este de incredere
+ Certificatul serverului a expirat
+ - Perioada de valabilitate a certificatului serverului este în viitor
+ URL nu se potriveste cu numele gazda in certificat
+ Vrei să ai încredere în acest certificat, oricum?
+ Certificatul nu a putut fi salvat.
+ Detalii
+ Ascunde
+ A emis:
+ Emis de:
+ Nume comun
+ Organizaţie
+ Unitate organizationala
+ Tara :
+ Stat:
+ Locaţie:
+ Validitate:
+ De la :
+ Catre:
+ Semnatura:
+ Algoritm:
+ Certificatul nu a putut fi aratat.
+ - Nu exista nici o informaţie pentru aceasta eroare
+ Acesta este un substituent
+ placeholder.txt
+ Imagine PNG
+ 389 KO
+ 2012/05/18 12:23 PM
+ 12:23:45
+ Incarca poze doar via WiFi
+ Încarcă videoclipuri doar via WiFi
+ /Încărcare instanta
+ Actualizați conflictul
+ Fișierul de la distanță %s nu este sincronizat cu fișierul local. Continuand, se va înlocui conținutul fișierului de pe server.
+ Pastreaza amandoua
+ Scrie peste
+ Nu încarcă
+ Previzualizare imagine
+ Aceasta imagine nu poate fi arătată
+ %1$s nu a putut fi copiat in dosarul local %2$s
+ Ne pare rău, partajarea nu este activată pe server. Vă rugăm să contactați administratorul dvs.
+ A apărut o eroare în timp ce încerca să partajeze acest fișier sau folder
+ A apărut o eroare în timp ce încerca să departajeze sau unshare acest fișier sau folder
+ Expediază
+ Link copiat
+ Copiat în clipboard
+ Eroare critică: nu se pot executa operațiunile
+ A apărut o eroare în timp ce se conecta la server
+ A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat
+ A apărut o eroare în timp ce se aștepta pentru server, operațiunea nu s-a executat
+ Operațiunea nu a putut fi finalizată, serverul este indisponibil
+
+ Nu aveți permisiune %s
+ pentru a redenumi acest fișier
+ pentru a șterge acest fișier
+ de a share acest fișier
+ de a nu permite accesul la acest fisier
+ pentru a crea fisierul
+ pentru a încărca în acest folder
+ Fișierul nu mai este disponibil pe server
+ Conturi
+ Parolă greșită
+ Alege
+ Securitate
diff --git a/res/values-ru-rRU/strings.xml b/res/values-ru-rRU/strings.xml
index b7d3c62a8e..6675918be2 100644
--- a/res/values-ru-rRU/strings.xml
+++ b/res/values-ru-rRU/strings.xml
@@ -16,7 +16,6 @@
Включить немедленную загрузку
Мгновенно загрузить фотографии, Ñделанные камерой
Помощь
- URL
Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ
Пароль
Я новичок в %1$s
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index b575553358..66ad7ad03c 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -1,52 +1,58 @@
- %1$s Приложение Ðндроид
+ %1$s Приложение Ð´Ð»Ñ Ðндроида
ВерÑÐ¸Ñ %1$s
Обновить учетную запиÑÑŒ
- Загрузка
- Содержимое от других приложений
+ Загрузить
+ Содержимое из других приложений
Файлы
Открыть Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ
- Создать директорию
+ ÐÐ¾Ð²Ð°Ñ Ð¿Ð°Ð¿ÐºÐ°
ÐаÑтройки
- Детали
- Главные
+ Подробно
+ Отправить
+ ОÑновные
Больше
- Ðккаунты
- Управление аккаунтами
+ Учётные запиÑи
+ Управление учётными запиÑÑми
App PIN
- Защитить ваш клиент применение
- Включить моментальную загрузку
- Моментально загружать фотографии, полученные Ñ ÐºÐ°Ð¼ÐµÑ€Ñ‹
- Включить запиÑÑŒ журнала
- Ðто иÑпользуетÑÑ Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации проблем
- ЗапиÑывать иÑторию
- ЗдеÑÑŒ показаны журналы
- Удалить иÑторию
+ Защитить ваш клиент
+ БыÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° фотографий
+ Ðемедленно загружать фотографии Ñделанные камерой
+ БыÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° видео
+ БыÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° видео Ñ ÐºÐ°Ð¼ÐµÑ€Ñ‹
+ Включить журналирование
+ ИÑпользуетÑÑ Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации ошибок
+ Журнал
+ ЗдеÑÑŒ показаны запиÑи в журнал
+ Удалить иÑторию запиÑей
Помощь
Рекомендовать другу
ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑвÑзь
Штамп
Попробуйте %1$s на вашем Ñмартфоне!
- Хочу предложить вам пользоватьÑÑ %1$s на вашем Ñмартфоне!\nÐ”Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸: %2$s
+ Хочу предложить вам иÑпользовать %1$s на Ñмартфоне!\nЗагрузить можно здеÑÑŒ: %2$s
+
Проверить Ñервер
- ÐÐ´Ñ€ÐµÑ Ñервера
- Пользователь
+ ÐÐ´Ñ€ÐµÑ Ñервера https://...
+ Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ
Пароль
- Впервые Ñ %1$s?
+ Ðезнакомы Ñ %1$s?
Файлы
- Соединить
- Загрузка
- Выбрать меÑто Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸:
- Ðккаунты не найдены
- Ðа вашем уÑтройÑтве нет аккаунтов %1$s. ÐаÑтройте Ñначала аккаунт.
+ ПодключитьÑÑ
+ Загрузить
+ Выберете папку Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸
+ Ð£Ñ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ не найдена
+ Ðа вашем уÑтройÑтве нет учётных запиÑей %1$s. Сначала нужно наÑтроить учётную запиÑÑŒ.
УÑтановка
Выход
Ðет Ñодержимого Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸
- Контент не получен. Ðечего загружать.
+ Содержимое не получено. Ðечего загружать.
%1$s не имеет доÑтупа к опубликованным данным
Загрузка
- Ð’ Ñтой папке нет файлов.\nÐовые файлы могут быть добавлены Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ пункта меню \"Загрузить\".
+ ЗдеÑÑŒ ничего нет. Загрузите что-нибудь!
+ Загрузка...
+ В данной папке нет файлов.
Ðажмите на файл Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.
Размер:
Тип:
@@ -55,178 +61,221 @@
Скачать
Обновить файл
Файл был переименован в %1$s во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸
+ ПоделитьÑÑ ÑÑылкой
+ Удалить ÑÑылку
Да
Ðет
ОК
Отменить Ñкачивание
- Отмена загрузки
+ Отменить загрузку
Отмена
- Сохранить & Выйти
+ Сохранить и выйти
Ошибка
- ЗагружаетÑÑ...
+ Идёт загрузка...
ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°
О программе
Сменить пароль
- Удалить аккаунт
- Создать аккаунт
+ Удалить учётную запиÑÑŒ
+ Создать учётную запиÑÑŒ
Загрузить из...
- Ð˜Ð¼Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð¸
+ Ð˜Ð¼Ñ Ð¿Ð°Ð¿ÐºÐ¸
Загрузка...
%1$d%% загрузки %2$s
- Загрузка прошла уÑпешно
+ Загрузка завершена
%1$s был уÑпешно загружен
Ошибка загрузки
Загрузка %1$s не может быть завершена
+ Загрузка не удалаÑÑŒ, Вам необходимо переподключитьÑÑ
Скачивание...
%1$d%% ÑÐºÐ°Ñ‡Ð¸Ð²Ð°Ð½Ð¸Ñ %2$s
- Скачивание прошло уÑпешно
+ Скачивание завершено
%1$s уÑпешно Ñкачан
- Скачивание не удалаÑÑŒ
+ Скачивание не удалоÑÑŒ
Скачивание %1$s не может быть завершено
- Ещё не загружено
- Выберите аккаунт
+ Ещё не Ñкачано
+ Скачивание не удалоÑÑŒ, Вам необходимо переподключитьÑÑ
+ Выберите учётную запиÑÑŒ
Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾ÑˆÐ»Ð° неудачно
+ Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ðµ удалаÑÑŒ, Вам необходимо переподключитьÑÑ
Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ %1$s не может быть завершена
Ðеверный пароль Ð´Ð»Ñ %1$s
Обнаружены конфликты
- %1$d файлы, которые должны быть Ñинхронизированными не могут ÑинхронизироватьÑÑ
+ %1$d файлы не могут быть Ñинхронизированы
Ðе удалоÑÑŒ Ñинхронизировать файлы
- Содержание %1$d файла(ов) не может быть Ñинхронизировано (%2$d конфликта(ов))
+ Содержимое %1$d файлов не может быть Ñинхронизировано (конфликтов: %2$d)
ÐеÑколько локальных файлов были забыты
- %1$d файлы из %2$s папки не могут быть Ñкопированы в
- файлы, загруженные Ñ Ñтого уÑтройÑтва, Ñкопированы в локальную папку %1$s Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ‚ÐµÑ€Ð¸ данных, когда отдельный файл ÑинхронизируетÑÑ Ñ Ð½ÐµÑкольких учётных запиÑей. По причине Ñтого изменениÑ, вÑе файлы, загруженные в предыдущих верÑиÑÑ… Ñтого приложениÑ, были Ñкопированы в папку %2$s. Однако, ошибка помешала завершению Ñтой операции при Ñинхронизации учётной запиÑи. Ð’Ñ‹ можете либо оÑтавить файлы как еÑÑ‚ÑŒ, или перемеÑтить их в папку %1$s и Ñохранить ÑÑылку в %4$s. \nÐ’ ÑпиÑке указаны локальные файлы, привÑзанные к файлам на Ñервере в папке %5$s.
+ Ðе возможно Ñкопировать %1$d файлы из %2$s папки
+ ÐÐ°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ð²ÐµÑ€Ñии 1.3.16, файлы, загружаемые Ñ Ñтого уÑтройÑтва, копируютÑÑ Ð² локальную директорию %1$s, чтобы предотвратить потерю данных при Ñинхронизации файла Ñ Ð½ÐµÑколькими учётными запиÑÑми.\n\nПоÑтому вÑе файлы, загруженные предыдущими верÑиÑми данного приложениÑ, были Ñкопированы в директорию %2$s. Однако, во Ð²Ñ€ÐµÐ¼Ñ Ñинхронизации что-то помешало завершить Ñту операцию. Теперь можно либо оÑтавить файлы как еÑÑ‚ÑŒ и удалить ÑÑылку на %3$s, либо перемеÑтить их в %1$s и Ñохранить ÑÑылку на %4$s.\n\nÐиже перечиÑлены локальные файлы, и ÑоответÑтвующие им удалённые файлы в %5$s, к которым они привÑзаны.
Каталог %1$s больше не ÑущеÑтвует
ПеремеÑтить вÑÑ‘
Ð’Ñе файлы были перемещены
Ðекоторые файлы не могут быть перемещены
Локально: %1$s
Удаленно: %1$s
- ОтÑутÑтвует доÑтаточное количеÑтво меÑта Ð´Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ñ… файлов в папку %1$s. Хотите ли Ð’Ñ‹ перемеÑтить их в другое меÑто?
- Ð’Ñтавьте PIN вашего приложениÑ
- Введите App PIN
- ПИÐ-код будет запрашиватьÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ð¹ раз, когда вы запуÑкаете приложение.
- Повторите App PIN
+ Ð”Ð»Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… файлов в папку %1$s недоÑтаточно Ñвободного меÑта. Скопировать в другое меÑто?
+ Ð’Ñтавьте App PIN
+ Введите App PIN
+ PIN-код будет запрашиватьÑÑ Ð¿Ñ€Ð¸ каждом запуÑке приложениÑ.
+ Повторите ввод App PIN
Удалить App PIN
- Два App PIN не Ñовпадают
+ Введённые App PIN не Ñовпадают
Ðеверный App PIN
App PIN удалён
App PIN Ñохранён
- %1$s музыкальный проигрыватель
+ %1$s аудиоплеер
%1$s (проигрываетÑÑ)
%1$s (загружаетÑÑ)
%1$s воÑпроизведение завершено
- Ðе найден медиа-файл
- Ðе наÑтроена ÑƒÑ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ
+ Медиафайлов не найдено
+ Ð£Ñ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ не наÑтроена
Файл в неверной учётной запиÑи
Ðеподдерживаемый кодек
- Файл не может быть прочитан
- Файл
- Тайм аут при воÑпроизведении
- Ðевозможно воÑпроизвеÑти файл как поток
- Файл не может быть проигран Ñтандартным плеером
+ Медиафайл не может быть прочитан
+ Медиафайл некорректно закодирован
+ Ð’Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚Ð¾Ðº воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²Ñ‹ÑˆÐ»Ð¾
+ Ðевозможно организовать потоковую передачу медиафайла
+ Медиафайл не может быть проигран Ñтандартным плеером
Ошибка безопаÑноÑти при воÑпроизведении %1$s
Ошибка ввода при воÑпроизведении %1$s
ÐÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при воÑпроизведении %1$s
Перемотка назад
ВоÑпроизведение или пауза
Перемотка вперед
+ ПроиÑходит авторизациÑ.....
Попытка входа...
- Ðет Ñетевого ÑоединениÑ
+ Ðет Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñети
Защищённое Ñоединение недоÑтупно.
Соединение уÑтановлено
ТеÑтирование ÑоединениÑ...
- ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñервер
- Ð£Ñ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ Ð´Ð»Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ Ñервера уже ÑущеÑтвует на уÑтройÑтве
- Введённый пользователь не ÑоответÑвует пользователю учётной запиÑи
+ ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñервера задана неверно
+ Ð£Ñ‡Ñ‘Ñ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ такого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ Ñервера уже ÑущеÑтвует на уÑтройÑтве
+ Введённый пользователь не ÑоответÑтвует Ñтой учётной запиÑи
Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°!
Ðевозможно найти Ñервер
- ÐкземплÑÑ€ Ñервер не найден
+ Сервер не найден
Сервер Ñлишком долго не отвечает
Ðеверный URL
Ошибка инициализации SSL
- Ðевозможно проверить Ñертификат SSL Ñервера
+ Ðевозможно проверить SSL-Ñертификат Ñервера
ÐеизвеÑÑ‚Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñервера
Ðевозможно уÑтановить Ñоединение
Защищённое Ñоединение уÑтановлено
Ðеверное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль
Ошибка авторизации
- Сервер отказал в доÑтупе
- Ðеожиданный ответ; пожалуйÑта, введите Ð°Ð´Ñ€ÐµÑ Ñервера ещё раз
- Ваша Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸Ñтекла. ПожалуйÑта, авторизуйтеÑÑŒ Ñнова
+ Сервер авторизации отказал в доÑтупе
+ Ðеожиданный ответ; введите Ð°Ð´Ñ€ÐµÑ Ñервера ещё раз
+ Ð’Ñ€ÐµÐ¼Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ð¸ иÑтекло. ПожалуйÑта, авторизуйтеÑÑŒ Ñнова
ПожалуйÑта, введите пароль
- Ваша ÑеÑÑÐ¸Ñ Ð¸Ñтекла. ПожалуйÑта, подключитеÑÑŒ Ñнова
+ Ð’Ñ€ÐµÐ¼Ñ ÑеÑÑии иÑтекло. ПожалуйÑта, подключитеÑÑŒ Ñнова
Подключение к Ñерверу аутентификации...
Сервер не поддерживает выбранный метод аутентификации
- %1$s не поддерживает множеÑтвенные учётные запиÑи
+ %1$s не поддерживает Ñразу неÑколько учётных запиÑей
+ Ваш Ñервер не возвращает корректный пользовательÑкий идентификатор, пожалуйÑта ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором
+⇥
+ Ðевозможно аутентифицироватьÑÑ Ð½Ð° Ñтом Ñервере
ОбновлÑÑ‚ÑŒ файл
Переименовать
Удалить
- Ð’Ñ‹ в Ñамом деле хотите удалить %1$s ?
- Ð’Ñ‹ дейÑтвительно хотите удалить %1$s и его Ñодержимое ?
+ Ð’Ñ‹ дейÑтвительно хотите удалить %1$s?
+ Ð’Ñ‹ дейÑтвительно хотите удалить %1$s и его Ñодержимое?
Только локально
Только локальные данные
Удалить Ñ Ñервера
- И удалённо и локально
- УÑпешное удаление
- Удаление не может быть завершено
+ Удалённо и локально
+ Удаление завершено
+ Ошибка удалениÑ
Введите новое имÑ
Ð›Ð¾ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ðµ может быть переименована; попробуйте другое имÑ
Переименование не может быть завершено
Удаленный файл не может быть проверен
Содержимое файла уже Ñинхронизировано
- Ð”Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ðµ может быть Ñоздана
+ Ðе возможно Ñоздать папку
+ ÐедопуÑтимые Ñимволы: / \\ < > : \" | ? *
+ Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° не может быть пуÑтым
Подождите немного
- ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°; попробуйте другое приложение Ð´Ð»Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ð° файла
+ ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°; выберите Ñтот файл из другого приложениÑ
Файлы не выбраны
- Подключать через oAuth2
+ Отправить ÑÑылку...
+ Войти через oAuth2
Подключение к Ñерверу oAuth2...
ПодлинноÑÑ‚ÑŒ Ñайта не может быть проверена
- Сертификат Ñервера не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼
- Срок дейÑÑ‚Ð²Ð¸Ñ Ñертификата Ñервера иÑтёк
- - Сертификат Ñервера Ñлишком новый
- - ÐÐ´Ñ€ÐµÑ Ð½Ðµ Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ в Ñертификате
- Ð’Ñе-равно доверÑÑ‚ÑŒ данному Ñертификату?
+ - Срок дейÑÑ‚Ð²Ð¸Ñ Ñертификата Ñервера ещё не началÑÑ
+ - URL не Ñовпадает Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Ñервера в Ñертификате
+ Ð’Ñ‹ хотите доверÑÑ‚ÑŒ данному Ñертификату в любом Ñлучае?
Сертификат не может быть Ñохранён
- Детали
- СпрÑтать
- Выдано длÑ:
- Выдан:
+ Подробно
+ Скрыть
+ Кому выдано:
+ Кем выдано:
ИмÑ:
ОрганизациÑ:
Организационное подразделение:
Страна:
- СтатуÑ:
+ Штат:
МеÑтонахождение:
Срок дейÑтвиÑ:
- От:
- До:
+ Из:
+ Ð’:
ПодпиÑÑŒ:
Ðлгоритм:
+ Сертификат не может быть показан.
+ - Информации об ошибке нет
Ðто заполнитель
placeholder.txt
Изображение PNG
- 389 KB
+ 389 КБ
2012/05/18 12:23 PM
12:23:45
- Загружать Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ через WiFi
+ Загружать Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ через Wi-Fi
+ Загрузка видео только через WiFi
/InstantUpload
Конфликт обновлениÑ
- Удаленный файл %s не Ñинхронизирован Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼. Завершение приведет к замене ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° на Ñервере.
- ОÑтавить оба
+ Удаленный файл %s не Ñинхронизирован Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼. Продолжение приведет к замене Ñодержимого файла на Ñервере.
+ Сохранить оба
Заменить
Ðе загружать
ПредпроÑмотр
Ðто изображение не может быть отображено
- %1$s не может быть Ñкопирован в %2$s локальною папку
- БыÑÑ‚Ñ€Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ° не удалаÑÑŒ
- БыÑтрые загрузки не удалиÑÑŒ
- СпиÑок вÑех неудачных загрузок
- Выбрать вÑÑ‘
- Ещё раз попробовать вÑÑ‘ выделенное
- Удалить вÑÑ‘| выбранное из очереди загрузки
- Попробовать ещё раз загрузить изображение
- Загрузить больше картинок
- Ðичего не делать, еÑли не в Ñети
- Сообщение об ошибке
- Проверьте наÑтройки Ñервера, возможно ваш лимит превышен
+ %1$s не возможно Ñкопировать в локальною папку %2$s
+ К Ñожалению, на вашем Ñервере отключен ÑовмеÑтный доÑтуп. ПожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð²Ð°ÑˆÐ¸Ð¼ админиÑтратором.
+ Ðевозможно добавить в общий доÑтуп. ПожалуйÑта, проверьте, ÑущеÑтвует ли файл
+ Ошибка предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа к Ñтому файлу или каталогу
+ Ðевозможно убрать из общего доÑтупа. ПожалуйÑта, проверьте, ÑущеÑтвует ли файл
+ Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа к Ñтому файлу или каталогу
+ Отправить
+ Копировать ÑÑылку
+ Скопировано в буфер обмена
+ КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°: невозможно выполнить операции
+ При подключении к Ñерверу возникла ошибка
+ Во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ñервера возникла ошибка, Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть завершена
+ Во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ñервера возникла ошибка, Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть завершена
+ ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть завершена, Ñервер недоÑтупен
+
+ У Ð²Ð°Ñ Ð½ÐµÑ‚ доÑтупа %s
+ переименовать Ñтот файл
+ удалить Ñтот файл
+ опубликовать Ñтот файл
+ отменить публикацию Ñтого файла
+ Ñоздать файл
+ загрузить в Ñту папку
+ Ðтот файл больше недоÑтупен на Ñервере
+ Учётные запиÑи
+ Добавить учетную запиÑÑŒ
+ Журналы
+ ИÑÑ‚Ð¾Ñ€Ð¸Ñ ÐžÑ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ð¹
+ Журналы Ðндроид-Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ownCloud
+ ЗагружаютÑÑ Ð´Ð°Ð½Ð½Ñ‹Ðµ...
+ ТребуетÑÑ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ
+ Ðеправильный пароль
+ ПеремеÑтить
+ ЗдеÑÑŒ ничего нет. Ð’Ñ‹ можете добавить папку!
+ Выбрать
+ Ðевозможно перемеÑтить. ПожалуйÑта, проверьте, ÑущеÑтвует ли файл
+ Ðевозможно перемеÑтить папку в папку-потомок
+ Файл уже ÑущеÑтвует в папке назначениÑ
+ Произошла ошибка при попытке Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñтого файла или папки
+ перемеÑтить Ñтот файл
+ БезопаÑноÑÑ‚ÑŒ
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 59a853188d..e64f57750c 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -2,17 +2,13 @@
උඩුගචකිරීම
ගොනු
- ඩිරෙක්ටරිය à·ƒà·à¶¯à¶±à·Šà¶±
සිටුවම්
à·ƒà·à¶¸à·à¶±à·Šâ€à¶ºà¶ºà·™à¶±à·Š
à·€à·à¶©à·’
ගිණුම්
ගිණුම් කළමනà·à¶šà¶»à¶±à¶º
ඔබේ සේවà·à¶½à·à¶·à·’ය෠සුරකින්න
- ක්â€à·‚ණික උඩුගචකිරීම් සක්â€à¶»à·’ය කරන්න
- කà·à¶¸à¶»à·à·€à·™à¶±à·Š ගà¶à·Š රූප ක්â€à·‚ණිකව උඩුගචකරන්න
උදව්
- සේවà·à¶¯à·à¶ºà¶šà¶ºà·š ලිපිනය
පරිà·à·“ලක නම
මුර පදය
ගොනු
@@ -23,6 +19,7 @@
ස්ථà·à¶´à¶±à¶º
නික්මෙන්න
උඩුගà¶à·€à·š
+ මෙහි කිසිවක් නොමà·à¶. යමක් උඩුගචකරන්න
à·€à·à¶©à·’ විස්à¶à¶» සඳහ෠ගොනුවක් ස්පර්ෂ කරන්න
විà·à·à¶½à¶à·Šà·€à¶º:
ගණය:
@@ -40,7 +37,7 @@
මුරපදය වෙනස් කිරීම
ගිණුම මකන්න
ගිණුම à·ƒà·à¶¯à¶±à·Šà¶±
- ඩිරෙක්ටරි නම
+ ෆොල්ඩරයේ නම
උඩුගචකිරීම à·ƒà·à¶»à·Šà¶®à¶šà¶ºà·’
උඩුගචකිරීම අසà·à¶»à·Šà¶®à¶šà¶ºà·’
බà·à¶œà¶à·€à·š...
@@ -64,16 +61,17 @@
ගොනුව යà·à·€à¶à·Šà¶šà·à¶½à·“නව à¶à¶¶à·à¶œà¶±à·Šà¶±
නà·à·€à¶ නම් කරන්න
ඉවà¶à·Š කරන්න
- %1$s à·ƒà·à¶¶à·à·€à·’න්ම ඉවà¶à·Šà¶šà·’රීමට අවà·à·Šâ€à¶ºà¶¯?
පෙදෙසි පමණක්
සේවà·à¶¯à·à¶ºà¶šà¶ºà·à¶œà·™à¶±à·Š ඉවà¶à·Š කරන්න
දුරස්ථ හ෠පෙදෙසි
à·ƒà·à¶»à·Šà¶®à¶š ඉවà¶à·Šà¶šà·’රීමක්
ඉවà¶à·Š කිරීම සම්පූර්ණ කළ නොහà·à¶š
නà·à·€à¶ නම් කිරීම සම්පුර්ණ කළ නොහà·à¶šà·’ විය
- ඩිරෙක්ටරිය සෑදීමට නොහà·à¶šà·’ විය
ස්වල්ප මොහොà¶à¶šà·Š සිටින්න
නොසිà¶à·” ප්â€à¶»à·à·Šà¶«à¶ºà¶šà·Š; කරුණà·à¶šà¶» වෙනà¶à·Š යෙදුමක් භà·à·€à·’à¶à· කර ගොනුව à¶à·à¶»à¶±à·Šà¶±
ගොනුවක් à¶à·à¶»à· නà·à¶
සඟවන්න
+
+ ගිණුම්
+ à¶à·à¶»à¶±à·Šà¶±
diff --git a/res/values-sk-rSK/strings.xml b/res/values-sk-rSK/strings.xml
index 16b7778cbc..768604358d 100644
--- a/res/values-sk-rSK/strings.xml
+++ b/res/values-sk-rSK/strings.xml
@@ -7,17 +7,20 @@
Obsah z inej aplikácie
Súbory
Otvoriť v
- Vytvor prieÄinok
+ Nový prieÄinok
Nastavenia
Podrobnosti
+ Odoslať
Všeobecné
Viac
ÚÄty
Správa úÄtov
PIN aplikácie
Chrániť klienta aplikácie
- Zapnúť okamžité odosielanie
- Okamžite odosielať fotky z fotoaparátu
+ Okamžité nahratie obrázka
+ Okamžite nahrať obrázok zaznamenaný fotoaparátom
+ Okamžité nahranie videa
+ Okamžite nahrať video zaznamenané fotoaparátom
Povoliť logovanie
Toto je použité pre logovanie problémov
História logovania
@@ -29,14 +32,14 @@
Podmienky použÃvania
Skúste %1$s na vašom telefóne!
Skontrolovať Server
- Adresa servera
+ Adresa servera https://...
PoužÃvateľské meno
Heslo
Ste nový v %1$s?
Súbory
- Pripoj
+ Pripojiť
Nahrať
- Vyberte prieÄinok pre nahrané súbory:
+ Vyberte prieÄinok pre nahrávanie:
ÚÄet sa nenaÅ¡iel
Na tomto zariadenà nie je zadaný žiadny %1$s úÄet. Zadajte ho prosÃm.
Nastavenie
@@ -45,7 +48,9 @@
Nedodaný žiaden obsah. NiÄ na odoslanie.
%1$s nemá práva pre prÃstup k zdieľanému obsahu
Nahrávanie
- PrieÄinok neobsahuje súbory.\nNové súbory môžete pridaÅ¥ cez \"Upload\".
+ Žiadny súbor. Nahrajte nieÄo!
+ Nahráva sa...
+ V tomto prieÄinku nie sú žiadne súbory.
Viac informácià zÃskate kliknutÃm na súbor.
Veľkosť:
Typ:
@@ -54,6 +59,8 @@
Stiahnuť
Obnoviť súbor
Súbor bol premenovaný na %1$s poÄas nahrávania
+ Zdieľať linku
+ Zrušiť zdieľanie odkazu
Ãno
Nie
OK
@@ -76,6 +83,7 @@
%1$s úspešne odoslaný
Odoslanie bolo neúspešné
Odoslanie %1$s nemohlo byÅ¥ dokonÄené
+ Nahrávanie zlyhalo. Prihláste sa znovu
SÅ¥ahujem ...
%1$d%% SÅ¥ahovanie %2$s
Sťahovanie bolo úspešné
@@ -83,8 +91,10 @@
Stiahnutie zlyhalo
SÅ¥ahovanie %1$s nebolo dokonÄené
Ešte nie je stiahnuté
+ Sťahovanie zlyhalo. Prihláste sa znovu
ZvoliÅ¥ úÄet
Synchronizácia zlyhala
+ Synchronizácia zlyhala. Prihláste sa znovu
Synchronizáciu %1$s nemožno dokonÄiÅ¥
Nesprávne heslo pre %1$s
Objavené konflikty
@@ -92,20 +102,20 @@
Automatická synchronizácia súborov zlyhala
Obsah %1$d súborov nemohol byť synchronizovaný (%2$d konfliktov)
Niektoré lokálne súbory boli zabudnuté
- %1$d súborov z prieÄinka %2$s nemožno skopÃrovaÅ¥ do
- Od verzie 1.3.16 sú súbory nahrané z tohoto zariadenia, skopÃrovné do lokálneho prieÄinka %1$s, aby sa zabránilo strate dát, keÄ je jeden súbor synchronizovný s viacerými úÄtami.\n\nPre túto zmenu, vÅ¡etky súbory nahraté v predchádzajúcich verziách tejto aplikácie boli skopÃrované do prieÄinka %2$s. Je nám to ľúto, chyba zabránila dokonÄeniu tejto operácie poÄas synchronizácie úÄtu. Súbor(y) môžete ponechaÅ¥ v súÄasnom stave a zmazaÅ¥ odkaz na %3$s, alebo presunúť súbor(y) do prieÄinka %1$s a zachovaÅ¥ odkaz na %4$s.\n\nÄŽalej lokálny súbor(y) a vzdialený súbor(y) sú spojené v prieÄinku %5$s.
+ %1$d súborov z %2$s prieÄinkov sa nepodarilo skopÃrovaÅ¥ do
+ PrieÄinok %1$s už existuje
Premiestniť všetko
Všetky súbory boli premiestnené
Niektoré súbory nebolo možné premiestniť
Lokálne: %1$s
Vzdialené: %1$s
- Nie je dostatok miesta na kopÃrovanie vybraných súborov do prieÄinka %1$s. Želáte si miesto kopÃrovania zmeniÅ¥?
+ Nie je dostatok miesta na skopÃrovanie vybraných súborov do prieÄinka %1$s. Želáte si ich namiesto toho presunúť?
Zadajte PIN aplikácie
Zadajte PIN aplikácie
Pri každom spustenà aplikácie bude vyžadovaný PIN
Zadajte znovu PIN aplikácie
Zrušiť PIN pre aplikáciu
- PIN sa neshodujú
+ PINy sa neshodujú
Nesprávny PIN aplikácie
PIN aplikácie bol odstránený
PIN aplikácie bol uložený
@@ -128,6 +138,7 @@
TlaÄidlo pretáÄania
TlaÄidlo prehrávania / pauzy
TlaÄidlo \"rýchlo vpred\"
+ Kontrolujem poverenia...
Pokus o pripojenie...
Bez sieťového pripojenia
Nie je k dispozÃcii bezpeÄné pripojenie
@@ -138,7 +149,7 @@
Zadané prihlasovacie údaje použÃvateľa sú nesprávne
Nastala neznáma chyba!
Nemožno nájsť hosta
- Servera inštancia nebola nájdená
+ Inštancia servera nebola nájdená
Serveru trvá odpoveÄ prÃliÅ¡ dlho
Poškodená URL
Inicializácia SSL zlyhala
@@ -150,17 +161,20 @@
Neúspešná autorizácia
PrÃstup odmietnutý autorizaÄným serverom
NeÄakaný stav; prosÃm, opätovne vložte URL adresu servera
- VaÅ¡a autorizácia expirovala. ProsÃm autorizujte sa znovu prosÃm
+ VaÅ¡a autorizácia vyprÅ¡ala. ProsÃm, autorizujte sa znovu
ProsÃm, zadajte aktuálne heslo
- VaÅ¡e pripojenie expirovalo. Pripojte sa znovu prosÃm
+ VaÅ¡e pripojenie vyprÅ¡alo. Pripojte sa znovu prosÃm
Pripájam sa na autentifikaÄný server...
Server nepodporuje túto autentifikaÄnú metódu
%1$s nepodporuje viacero úÄtov
+ Váš server nevracia správne použÃvateľské id, kontaktujte prosÃm správcu systému
+
+ Nie je možné vykonať autentifikáciu na server
Udržiavať súbor aktuálny.
Premenuj
Odober
- Naozaj odstrániť %1$s ?
- Chcete odstrániť %1$s a jeho obsah?
+ Naozaj chcete odstrániť %1$s?
+ Naozaj chcete odstrániť %1$s a jeho obsah?
Iba lokálne
Len lokálny obsah
Zmazať zo servera
@@ -173,9 +187,13 @@
Vzdialený súbor nemohol byť prekontrolovaný
Obsah súboru je zosynchronizovaný
PrieÄinok nie je možné vytvoriÅ¥
+ Zakázané znaky: / \\ < > : \" | ? *
+ Názov súboru nemôže byť prázdny
PoÄkaÅ¥ chvÃľu
NeoÄakávaný problém; skúste vybraÅ¥ súbor inou aplikáciou
Nebol vybraný súbor
+ Odošli link do ...
+ Prihlásiť sa z oAuth2
Pripájam sa na oAuth2 server…
Identitu stránky nemožno overiť
- Certifikát servera nie je overený
@@ -199,6 +217,8 @@
Do:
Podpis:
Algoritmus:
+ Certifikát nemohol byť zobrazený.
+ - Žiadne informácie o tejto chybe
Toto je \"placeholder\"
placeholder.txt
PNG obrázok
@@ -206,6 +226,7 @@
2012/05/18 12:23 PM
12:23:45
Odoslať fotografie iba cez WiFi
+ Nahrávať videá len cez WiFi
/InstantUpload
Konflikt pri aktualizácii
Vzdialený súbor %s nie je zosynchronizovaný s lokálnym. PokraÄovanie prepÃÅ¡e obsah súboru na serveri.
@@ -213,17 +234,34 @@
PrepÃsaÅ¥
Nenahrávajte
Ukážka obrazu
- Obraz nemôže byť zobrazený
+ Obrázok nemožno zobraziť
%1$s nemožno skopÃrovaÅ¥ do lokálneho prieÄinka %2$s
- Zlyhaný InstantnýUpload\"
- Zlyhané instantné nahratia
- Zhrnutie vÅ¡etkých zlyhaných nahratÃ
- vybrať všetko
- opakovať všetky vybrané
- zmazať všetky vybrané z radu pre nahratie
- opakovať nahratie obrazu:
- NaÄÃtaÅ¥ viac Obrázkov
- nevykonaÅ¥ niÄ, nie ste online pre instantné nahratie
- Chybová správa:
- ProsÃm skontrolujte nastavenie vášho servera, možno bola prekroÄená disková kvóta.
+ Je nám to ľúto, ale zdieľanie nie je na vaÅ¡om serveri povolené. ProsÃm kontaktujte vášho
+ administrátora.
+ Pri pokuse o zdieľanie tohto súboru alebo prieÄinka doÅ¡lo k chybe
+ Pri pokuse zruÅ¡iÅ¥ zdieľanie tohto súboru alebo prieÄinka doÅ¡lo k chybe
+ Odoslať
+ KopÃruj odkaz
+ SkopÃrované do schránky
+ Kritická chyba: operáciu nemožno vykonať
+ Pri pokuse o pripojenie na server nastala chyba.
+ Pri Äakanà na odpoveÄ servera nastala chyba, operácia nemohla byÅ¥ dokonÄená
+ Pri Äakanà na odpoveÄ servera nastala chyba, operácia nemohla byÅ¥ dokonÄená
+ Operácia nemohla byÅ¥ dokonÄená, server je nedostupný
+
+ Nemáte oprávnenie %s
+ premenovať tento súbor
+ zmazať tento súbor
+ zdieľať tento súbor
+ zrušiť zdieľanie tohto súboru
+ vytvoriť súbor
+ nahrávaÅ¥ do tohto prieÄinka
+ Súbor už na serveri nie je dostupný
+ ÚÄty
+ PridaÅ¥ úÄet
+ Vyžaduje sa overenie
+ Nesprávne heslo
+ Presunúť
+ Vybrať
+ ZabezpeÄenie
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index c757504ac2..63fbabf57c 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -1,2 +1,8 @@
-
+
+ Nastavenia
+ Všeobecné
+ Stiahnuť
+ Zrušiť
+
+
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index a54c11c490..dcdf60381c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -1,49 +1,67 @@
+ Program za Android %1$s
+ razliÄica %1$s
+ Osveži raÄun
Pošlji datoteko
Vsebina iz drugih programov
Datoteke
- Odpri z:
- Ustvari mapo
+ Odpri z
+ Nova mapa
Nastavitve
Podrobnosti
+ Pošlji
Splošno
VeÄ
RaÄuni
Upravljanje z raÄuni
Koda PIN programa
ZaÅ¡Äitite odjemalec
- OmogoÄi takojÅ¡nje poÅ¡iljanje
- Takojšnje pošiljanje posnetih fotografij
- OmogoÄi zapisovanje v dnevnik
- Zgodovina
+ Takojšnje pošiljanje slik
+ Takojšnje pošiljanje slik, zajetih s fotoaparatom, na strežnik
+ Takojšnje pošiljanje posnetkov
+ Takojšnje pošiljanje posnetkov, zajetih s fotoaparatom, na strežnik
+ OmogoÄi zapisovanje dnevnika
+ Uporablja se za beleženje težav in napak
+ Zgodovina beleženja dnevnika
+ Pokaže shranjene dnevnike
Izbriši zgodovino
PomoÄ
+ PriporoÄi prijateljem
Odziv
Natis
- Naslov strežnika
+ Preizkusi %1$s na pametnem telefonu!
+ Želim ti predstaviti %1$s na pametnem telefonu!\nPrejmeš ga lahko na: %2$s
+ Preveri strežnik
+ Naslov strežnika https://…
Uporabniško ime
Geslo
+ Ali ste novi uporabnik sistema %1$s?
Datoteke
Poveži
Pošlji
- Izberite mapo, v katero boste prenesli dokumente:
+ Izbor mape za pošiljanje:
UporabniÅ¡kega raÄuna ni mogoÄe najti
Na napravi ni raÄunov %1$s. Nastaviti je treba vsaj en raÄun.
Nastavi
KonÄaj
Ni vsebine za pošiljanje
Ni prejete vsebine. Ni datotek za pošiljanje.
- Oblak %1$s nima dovoljenj za dostop do vsebine v souporabi
+ Oblak %1$s nima nastavljenih dovoljenj za dostop do vsebine v souporabi
Pošiljanje
- V tej mapi ni datotek.\nNove datoteke je mogoÄe dodati preko možnosti menija \"PoÅ¡lji\".
+ Tukaj Å¡e ni niÄesar. Najprej je treba datoteke poslati v oblak!
+ Poteka nalaganje ...
+ V tej mapi ni datotek.
Pritisnite na datoteko za prikaz dodatnih podrobnosti.
Velikost:
Vrsta:
Ustvarjeno:
Spremenjeno:
Prejmi
+ Osveži datoteko
Datoteka je bila med nalaganjem preimenovana v %1$s
+ Povezava za souporabo
+ Odstrani možnost souporabe
Da
Ne
V redu
@@ -52,7 +70,7 @@
PrekliÄi
Shrani in konÄaj
Napaka
- Nalaganje...
+ Nalaganje ...
Neznana napaka
O oblaku %1$s
Spremeni geslo
@@ -66,82 +84,119 @@
%1$s je uspešno poslan
Pošiljanje je spodletelo
PoÅ¡iljanja %1$s ni mogoÄe dokonÄati
+ Pošiljanje je spodletelo. Pred nadaljevanjem se je treba prijaviti.
Prejemanje …
%1$d%% Prejemanje %2$s
Prejemanje je uspeÅ¡no konÄano
%1$s je uspešno prejet
Prejemanje je spodletelo
Prejemanja %1$s ni mogoÄe dokonÄati
- Prenos Å¡e ni zakljuÄen
+ Prejem Å¡e ni zakljuÄen
+ Prejemanje je spodletelo. Pred nadaljevanjem se je treba prijaviti.
Izbor raÄuna
Usklajevanje je spodletelo
+ Usklajevanje je spodletelo. Znova se je treba prijaviti.
Usklajevanja %1$s ni mogoÄe dokonÄati
+ Neveljavno geslo za %1$s
Zaznani spori
- %1$d vedno-ažurnih datotek ni bilo mogoÄe uskladiti
- Usklajevanje vedno-ažurnih datotek je spodletelo
- Vsebino %1$d datotek ni bilo mogoÄe uskladiti (%2$d sporov)
+ %1$d stalno usklajenih datotek ni bilo mogoÄe uskladiti
+ Posodobitev stalno usklajenih datotek je spodletelo
+ Vsebine %1$d datotek ni bilo mogoÄe uskladiti (zaznanih je %2$d sporov)
Nekatere krajevne datoteke so spregledane
Skupno %1$d datotek iz mape %2$s ni mogoÄe kopirati v
+ Od razliÄice 1.3.16 so datoteke, poslane iz te naprave, varnostno kopirane v krajevno mapo %1$s. S tem je prepreÄena možnost izgube podatkov, ko se ena datoteka usklajuje z veÄ raÄuni.\n\nZaradi te spremembe so vse datoteke, ki so bile kopirane v prejÅ¡njih razliÄicah, kopirane v mapo %2$s. Zaradi napake ni mogoÄe konÄati usklajevanja. Datoteke lahko ali pustite kjer so, in odstranite povezavo na %3$s, ali pa premaknete datoteke v mapo %1$s in ohranite povezavo do %4$s.\n\nSpodaj so izpisane krajevne datoteke in oddaljene povezane datoteke v mapi %5$s.
+ Mapa %1$s ne obstaja veÄ
Premakni vse
Vse datoteke so uspešno premaknjene na novo mesto
Nekaterih datotek ni mogoÄe premakniti
Krajevno: %1$s
Oddaljeno: %1$s
- Na strežniku ni dovolj prostora za kopiranje izbranih datotek v mapo %1$s. Ali želite datoteke raje premakniti na novo mesto?
+ Ni dovolj prostora za kopiranje izbranih datotek v mapo %1$s. Ali jih želite premakniti?
Vnesite kodo PIN programa
Vnesite kodo PIN programa
Koda PIN bo zahtevana vsakiÄ pred zagonom programa.
Ponovno vnesite kodo PIN programa
Odstrani kodo PIN programa
- Vrednosti kodo PIN programa nista enaki
- Nepravilen kodo PIN programa
+ Vrednosti kod PIN programa nista enaki
+ Nepravilna koda PIN programa
Koda PIN programa je odstranjena
Koda PIN programa je shranjena
- %1$s (predvajanja)
- %1$s (nalaganja)
- Medijskih datotek ni bilo mogoÄe najti
- Niste navedli uporabniÅ¡kega raÄuna
- Dokument ni shranjen pod veljaven raÄun.
- Medijski kodek ni podprt
- Medijske datoteke ni bilo mogoÄe prebrati.
- Medijska datoteka ni pravilno kodirana.
- Medijske datoteke ni mogoÄe predvajati
- Medijske datoteke ni mogoÄe predvajati s predvajalnikom Stock media player
+ Predvajalnik glasbe %1$s
+ %1$s (se predvaja)
+ %1$s (se nalaga)
+ Predvajanje %1$s je konÄano
+ Predstavnih datotek ni mogoÄe najti
+ Ni navedenega raÄuna
+ Dokument ni shranjen v veljavnem raÄunu.
+ Nepodprt predstavni kodek
+ Predstavne datoteke ni mogoÄe prebrati.
+ Predstavna datoteka ni pravilno kodirana.
+ Poskus predvajanja je Äasovno potekel
+ Predstavne datoteke ni mogoÄe prikazati v pretoku
+ Predstavne datoteke ni mogoÄe predvajati s sistemsko privzetim predvajalnikom
+ Prišlo je do varnostne napake med predvajanjem %1$s
+ Prišlo je do napake vhoda med predvajanjem %1$s
+ PriÅ¡lo je do nepriÄakovane napake med predvajanjem %1$s
+ Vrni nazaj
+ Gumb za predvajanje in premor
+ Gumb za hitro predvajanje naprej
+ Pridobivanje overitve ...
Poskus prijave …
Ni omrežne povezave
Varna povezava ni na voljo.
Povezava je vzpostavljena
Preizkušanje povezave ...
- Nastavitve servera so napaÄno oblikovane
- Prišlo je do neznane napake
+ NapaÄno oblikovane nastavitve strežnika
+ Na napravi raÄun za istega uporabnika in strežnik že obstaja
+ Vpisan uporabnik ni lastnik tega raÄuna
+ Prišlo je do neznane napake!
Gostitelja ni mogoÄe najti
- Namestitve servera ni mogoÄe najti
- Strežnik je potreboval preveÄ Äasa za odgovor
+ Primerka strežnika ni mogoÄe najti
+ Odziv s strežnika je Äasovno pretekel
NapaÄno oblikovan naslov URL
ZaÄenjanje SSL je spodletelo
- Neprepoznana razliÄica strežnika servera
- Povezave ni mogoÄe vzpostaviti
+ Ni mogoÄe overiti istovetnosti strežnika SSL
+ Nepoznana razliÄica strežnika
+ Ni mogoÄe vzpostaviti povezave
Varna povezava je vzpostavljena
+ NapaÄno uporabniÅ¡ko ime ali geslo
+ Overitev ni uspeÅ¡no konÄana
+ Dostop je zavrnjen s strani overitvenega strežnika
+ NepriÄakovano stanje; ponovno je treba vpisati naslov URL strežnika
+ Overitev raÄuna je potekla. Pred nadaljevanjem je treba prijavo ponovno overiti.
+ Vnesite trenutno geslo
+ Seja je potekla. Ponovno je treba vzpostaviti povezavo.
+ Poteka povezovanje z overitvenim strežnikom ...
+ Strežnik ne podpira tega naÄina overitve
+ %1$s ne omogoÄa podpore veÄ raÄunom
+ Strežnik ne vraÄa ustreznega ID uporabnika. Stopite v stik s skrbnikom sistema.
+
+ Ni mogoÄe preveriti pristnosti strežnika
Datoteka naj bo posodobljena
Preimenuj
Odstrani
- Ali res želite odstraniti %1$s ?
- Ali ste prepriÄani, da želite odstraniti %1$s in njeno vsebino?
+ Ali res želite odstraniti %1$s?
+ Ali res želite odstraniti %1$s skupaj s celotno vsebino?
Le krajevno
- Samo lokalne vsebine
+ Le krajevno vsebino
Odstrani s strežnika
Oddaljeno in krajevno
Odstranitev je uspeÅ¡no konÄana
- Odstranjevanje ni dokonÄano
+ Odstranjevanje je spodletelo
Vnesite novo ime
Krajevne datoteke ni mogoÄe preimenovati; poskusite z drugaÄnim novim imenom
Preimenovanja ni možno dokonÄati
- Oddaljene datoteke ni bilo mogoÄe preveriti
- Vsebina datoteke je ažurna
+ Oddaljene datoteke ni mogoÄe preveriti
+ Vsebina datoteke je že usklajena
Mape ni mogoÄe ustvariti
+ Nedovoljeni znaki: characters: / \\ < > : \" | ? *
+ Ime datoteke ne sme biti prazno
PoÄakajte trenutek ...
PriÅ¡lo je do nepriÄakovane napake. Poskusite datoteko izbrati z drugim programom.
Ni izbranih datotek
+ Pošlji povezavo ...
+ Prijava z oAuth2
+ Poteka povezovanje s strežnikom oAuth2 ...
Istovetnosti strani ni mogoÄe preveriti
- potrdilo strežnika ni vredno zaupanja
- potrdilo strežnika je poteklo
@@ -154,7 +209,7 @@
Izdano za:
Izdajatelj:
Splošno ime:
- Organizacija:
+ Ustanova:
Organizacijska enota:
Država:
Regija:
@@ -164,12 +219,17 @@
Do:
Podpis:
Algoritem:
- To je vsebnik predmetov.
+ Potrdila ni mogoÄe pokazati.
+ – Ni podatkov o napaki
+ To je vsebnik predmetov
+ vsebnik.txt
+ Slika PNG
389 KB
2012/05/18 12:23 PM
12:23:45
Pošiljaj slike le preko povezav Wi-Fi
- /NeposrednoNalaganje
+ Pošlji posnetke le preko povezave Wi-Fi
+ /TakojšnjePošiljanje
Posodobi podatke spora
Oddaljena datoteka %s ni usklajena s krajevno. Z nadaljevanem bo datoteka na strežniku zamenjana s krajevno.
Ohrani obe
@@ -177,8 +237,45 @@
Ne pošlji
Predogled slike
Te slike ni mogoÄe prikazati
- Datoteke %1$s ni mogoÄe kopirati v krajevno mapo %2$s.
- izberi vse
- Naloži veÄ slik
- SporoÄilo o napaki:
+ Datoteke %1$s ni mogoÄe kopirati v krajevno mapo %2$s
+ Souporaba je na strežniku onemogoÄena. Možnost lahko spreminjajo le
+ uporabniki s skrbniškimi dovoljenji.
+ Souporaba ni mogoÄa. Preverite, ali datoteka obstaja.
+ PriÅ¡lo je do napake med poskusom omogoÄanja souporabe te datoteke ali mape
+ Ni mogoÄe prekiniti souporabe. Preverite, ali datoteka obstaja.
+ Prišlo je do napake med poskusom odstranjevanja souporabe te datoteke ali mape
+ Pošlji
+ Kopiraj povezavo
+ Kopirano v odložiÅ¡Äe
+ KritiÄna napaka: dejanj ni možno izvesti
+ Med povezovanjem s strežnikom je prišlo do napake.
+ Med Äakanjem na vzpostavitev povezave s strežnikom je priÅ¡lo do napake. Zahtevanega dejanja ni mogoÄe izvesti.
+ Med Äakanjem na vzpostavitev povezave s strežnikom je priÅ¡lo do napake. Zahtevanega dejanja ni bilo mogoÄe konÄati.
+ Zahtevanega dejanja ni bilo mogoÄe konÄati. Strežnik ni dosegljiv.
+
+ Ni ustreznega dovoljenja %s
+ za preimenovanje datoteke.
+ za izbris datoteke.
+ za omogoÄanje souporabe datoteke.
+ za preklic souporabe datoteke.
+ za ustvarjanje datoteke.
+ za pošiljanje datoteke v oblak.
+ Datoteka na strežniku ni veÄ na voljo.
+ RaÄuni
+ Dodaj raÄun
+ Dnevnik
+ Pošlji zgodovino
+ Dnevnik programa ownCloud
+ Poteka nalaganje podatkov ...
+ Zahtevana je overitev
+ NapaÄno geslo
+ Premakni
+ Ni vsebine in datotek. Lahko ustvarite na primer mapo.
+ Izbor
+ Ni mogoÄe premakniti datoteke. Preverite, ali obstaja.
+ Ni mogoÄe premakniti mape v podrejeno mapo.
+ Datoteka v ciljni mapi že obstaja.
+ Prišlo je do napake med premikanjem datoteke v mapo
+ med premikanjem datoteke
+ Varnost
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 03b08ac026..adeb3e99c6 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -2,21 +2,75 @@
Ngarko
Skedarët
+ Dosje e\'re
Parametrat
+ Dërgo
Përgjithshme
Më tepër
+ Llogarit
+ PIN-i Aplikacionit
+ Ruani klientin tuaj
Ndihmë
+ Stampoj
Përdoruesi
Kodi
Skedarët
+ Lidhu
Ngarko
+ Nuk u gjend asnjë llogari
+ Nuk ka %1$s llogari në pajisjen tuaj. Ju lutemi të krijojnë një llogari të parë.
+ Ndërto
+ Dil
+ Ngarko
+ Këtu nuk ka asgje. Ngarko dicka
+ Trokitje e lehtë në një dokument për të shfaqur informacion shtesë.
+ Dimensioni:
+ Tipi:
+ Krijuar:
+ Modifikuar:
Shkarko
Po
Jo
+ Ok
Anulo ngarkimin
Anulo
Veprim i gabuar
+ Gabim panjohur
+ Rreth
Ndrysho fjalëkalimin
+ Fshi llogarin
+ Krijo llogari
+ Ngarko nga...
+ Emri i Skedarit
+ Ngarkim...
+ %1$d%% Ngarkim %2$s
+ Ngarkimi me sukses.
+ %1$s u ngarkua me sukses
Ngarkimi dështoi
+ Ngarkimi i %1$s nuk mund te behej
+ Shkarkimi...
+ %1$d%% Shkarkimi %2$s
+ Shkarkimi me sukses
+ %1$s u shkarkua me sukses
+ Shkarkimi dështoj
+ Zgjidhni Llogarine
+ Lutemi, vendosni PIN tuaj
+ Lutemi, rivendosni PIN tuaj
+ Hiqni PIN in tuaj
+ PIN-et nuk jane te njejte
+ PIN i gabuar
+ PIN-i u hoq
+ PIN-i u ruajt
+ Nuk ka lidhje ne Rrjet
+ Lidhja u vendos
+ Duke testuar lidhjen
+ Lidhja e Sigurt vendos
Riemërto
+ Hiq
+ Dërgo
+
+ Llogarit
+ Fjalëkalim i gabuar
+ Zgjidh
+ Siguria
diff --git a/res/values-sr-rSP/strings.xml b/res/values-sr-rSP/strings.xml
index 663c462af6..973a5489d4 100644
--- a/res/values-sr-rSP/strings.xml
+++ b/res/values-sr-rSP/strings.xml
@@ -3,15 +3,56 @@
Pošalji
Fajlovi
Podešavanja
+ Detaljnije
+ Pošalji
+ Opšte
+ Nalozi
+ Upravljaj nalozima
Pomoć
KorisniÄko ime
Lozinka
Fajlovi
Pošalji
+ Nalog nije nađen
+ Å alje se
+ Ovde nema niÄeg. PoÅ¡aljite neÅ¡to!
+ VeliÄina:
+ Tip:
Preuzmi
Da
Ne
+ Ok
Otkaži
Greška
Izmeni lozinku
+ Ukloni nalog
+ Novi nalog
+ Otpremanje...
+ Uspešno otpremljeno
+ Otpremanje nije uspelo
+ Preuzimanje...
+ Uspešno preuzeto
+ Preuzimanje nije uspelo
+ Odaberite nalog
+ Nema konekcije
+ Sigurna konekcija nije dostupna.
+ Konekcija uspostavljena
+ Preimenij
+ Ukloni
+ Uklanjanje je uspelo
+ Uklanjanje nije uspelo
+ Molim priÄekajte
+ Detaljnije
+ Sakrij
+ Organizacija:
+ Država:
+ Lokacija:
+ Od:
+ Za:
+ Potpis:
+ Zadrži oboje
+ Pošalji
+
+ Nalozi
+ Izaberi
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 446a6ee905..2ef137369c 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -3,14 +3,12 @@
Отпреми
Садржај Ñа других апликација
Датотеке
- Ðаправи фаÑциклу
ПоÑтавке
+ Пошаљи
Опште
Више
Ðалози
- Тренутно отпремај фотографије Ñликане камером
Помоћ
- ÐдреÑа Ñервера
КориÑничко име
Лозинка
Фајлови
@@ -22,7 +20,7 @@
Ðема Ñадржаја за отпремање
Садржај није примљен. Ðема ништа да Ñе отпреми.
Отпремање
- Ðема датотека у овој фаÑцикли.\nÐове датотеке можете да додате путем опције „Отпреми“.
+ Овде нема ничег. Отпремите нешто!
Додирните датотеку ради приказа додатних информација.
Величина:
Ð’Ñ€Ñта:
@@ -43,7 +41,6 @@
Обриши налог
Отвори налог
Отпреми из…
- Име фаÑцикле
Отпремам…
%1$d%% Отпремам %2$s
Отпремање је уÑпело
@@ -77,14 +74,12 @@
Редовно ажурирај датотеку
Преименуј
Уклони
- Желите ли да уклоните %1$s?
Само локално
Уклони Ñа Ñервера
Удаљено и локално
УнеÑите ново име
Ðе могу да довршим преименовање
Удаљена датотека Ñе не може проверити
- Ðе могу да направим фаÑциклу
Сачекајте тренутак
ÐиÑте изабрали датотеку
Ðе могу да проверим идентитет Ñајта
@@ -110,4 +105,9 @@
Ðлгоритам:
Отпремај Ñлике Ñамо путем бежичне мреже
Ðжурирај Ñукоб
+ Пошаљи
+
+ Ðалози
+ Одабери
+ БезбедноÑÑ‚
diff --git a/res/values-su/strings.xml b/res/values-su/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-su/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 57794a9419..c077786f75 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -7,17 +7,20 @@
Innehåll från andra program
Filer
Öppna med
- Skapa mapp
+ Ny mapp
Inställningar
Detaljer
+ Skicka
Allmänt
Mer
Konton
Hantera konton
applikation PIN
Skydda applikation-klienten
- Aktivera direktuppladdning
- Direktuppladdning av kamerabilder
+ Direktuppladdning av kamerabilder
+ Direktuppladning av bilder tagna med kameran
+ Direktuppladning av video
+ Direktuppladdning av video inspelade med kameran
Aktivera loggning
Används för att logga problem
Logghistorik
@@ -25,12 +28,12 @@
Radera historik
Hjälp
Rekommendera till en vän
- Ã…terkoppling
+ Feedback
Imprint
- Försök %1$s på din smarttelefon!
- Jag vill bjuda in dig till att anända %1$s på din smarttelefon!\nLadda ner här: %2$s
+ Prova %1$s på din smartphone!
+ Jag skullje vilja bjuda in dig till att prova %1$s på din smartphone!\nLadda ner appen från Google Play här: %2$s
Kontrollera Server
- Serveradress
+ Serveradress https://...
Användarnamn
Lösenord
Ny på %1$s?
@@ -46,7 +49,9 @@
Inget innehåll mottaget. Inget att ladda upp.
%1$s har inte rättighet till det delade innehållet
Laddar upp
- Det finns inga filer i denna mapp.\nNya filer kan läggas till med \"Ladda upp\" i menyn.
+ Ingenting här. Ladda upp något!
+ Laddar...
+ Det finns inga filer i den här mappen.
Peka på en fil för att visa mer information.
Storlek:
Typ:
@@ -55,6 +60,8 @@
Ladda ner
Ladda om fil
Filen bytte namn till %1$s under uppladdningen
+ Dela länk
+ Sluta dela länk
Ja
Nej
OK
@@ -77,6 +84,7 @@
%1$s laddades upp
Misslyckad uppladdning
Uppladdning av %1$s kunde inte slutföras
+ Uppladdning misslyckades, måste du logga in igen
Laddar ner ...
%1$d%% Laddar ner %2$s
Nedladdning klar
@@ -84,8 +92,10 @@
Misslyckad nedladdning
Nedladdning av %1$s kunde inte slutföras
Ännu inte nedladdade
+ Nerladda misslyckades, måste du logga in igen
Välj konto
Synkroniseringen misslyckades
+ Synkroniseringen misslyckades, du måste logga in på nytt.
Synkronisering av %1$s kunde inte slutföras
Felaktigt lösenord för %1$s
Konflikter uppstod
@@ -94,14 +104,13 @@
Innehållet i %1$d filer kunde inte synkas (%2$d konflikter)
Vissa lokala filer glömdes
%1$d filer från %2$s mappar kunde inte kopieras till
- Från och med version 1.3.16 kopieras uppladdade filer från den här enheten till den lokala %1$s mappen för att förhindra förlust av data när en enda fil synkroniseras med flera konton.\n\nPå grund av denna förändring har alla filer som laddats upp i tidigare versioner av denna app kopierats till %2$s mappen. Men ett fel förhindrade slutförande av denna operation under synkronisering. Du kan antingen lämna fil(er) som det är och ta bort länken till %3$s, eller flytta fil(er) till %1$s mappen och behålla länken till %4$s.\n\nNedan listas dom lokala fil(er) och fjärrfil(er) i %5$s dom var länkade till.
Mappen %1$s existerar inte längre
Flytta allt
Alla filer flyttades
Vissa filer kunde inte flyttas
Lokal: %1$s
Fjärr: %1$s
- Det finns inte tillräckligt med utrymme för att kopiera valda filer till mappen %1$s. Vill du flytta filerna istället?
+ Det finns inte tillräckligt med ledigt utrymme för att kopiera de valda filerna till %1$s mappen. Skulle du vilja flytta dem istället?
Ange din PIN
Ange applikation PIN
Din PIN måste anges varje gång du startar programmet.
@@ -130,6 +139,7 @@
Bakåtspolningsknapp
Spela- / Pausknapp
Snappspolningsknapp
+ Får tillstånd...
Försöker logga in...
Ingen nätverksanslutning
Säker anslutning inte tillgänglig.
@@ -158,11 +168,14 @@
Ansluter till autentiseringsservern...
Servern har inte stöd för denna autentiseringsmetod
%1$s har inte stöd för multipla konton
+ Din server returnerar inte ett korrekt användare id, vänligen kontakta en administratör
+
+ Kan inte autentisera mot servern
HÃ¥ll filen uppdaterad
Byt namn
Radera
- Vill du verkligen radera: %1$s ?
- Vill du verkligen radera %1$s och dess innehåll?
+ Vill du verkligen ta bort %1$s?
+ Vill du verkligen ta bort %1$s och dess innehåll?
Endast lokalt
Endast lokalt innehåll
Radera från server
@@ -175,9 +188,12 @@
Fjärrfilen kunde inte kontrolleras
Filinnehåll redan synkroniserat
Mapp kunde inte skapas
+ Förbjudna tecken är: / \\ < > : \" | ? *
+ Filnamnet får inte lämnas blankt
Var god vänta
Oväntat problem; prova annat program för aktuell fil
Ingen fil vald
+ Sänd länk till ...
Logga in med oAuth2.
Ansluter till oAuth2 servern…
Webbplatsens identitet kunde inte verifieras
@@ -202,6 +218,8 @@
Till:
Signatur:
Algoritm:
+ Certifikatet kunde inte visas.
+ - Ingen information om felet
Detta är en platshållare
placeholder.txt
PNG Bild
@@ -209,6 +227,7 @@
2012/05/18 12:23 PM
12:23:45
Ladda upp bilder endast via WiFi
+ Ladda upp videos endast via WIFI
/DirektUppladdning
Uppdateringskonflikt
Serverns fil %s är inte synkroniserad med den lokala filen. Fortsätt för att skriva över filen på servern.
@@ -218,15 +237,36 @@
Förhandsvisa bild
Denna bild kan inte visas
%1$s kunde inte kopieras till %2$s lokal mapp
- Fel vid direktuppladdning\"
- Misslyckades vid direktuppladdning
- Sammanfattning av alla misslyckade uppladdningar
- välj alla
- försökt igen med alla valda
- radera alla valda från uppladdningskön
- försök igen att ladda upp bilden:
- Ladda fler bilder
- Du är inte ansluten, direktuppladdning ej möjligt
- Felmeddelande:
- Vänligen kontrollera dina serverkonfiguration. Din kvot kan ha överskridits.
+ Ledsen, delning är inte aktiverat på din server. Vänligen kontakta din
+ administratör.
+ Ett fel uppstod vid försök att dela denna fil eller mapp
+ Ett fel uppstod vid försök att sluta dela denna fil eller mapp
+ Skicka
+ Kopiera länk
+ Kopierat till urklipp
+ Kritiskt fel: kan inte utföra åtgärden
+ Ett fel uppstod vid anslutning till servern.
+ Ett fel uppstod i väntan på servern, operationen kunde inte ha gjorts
+ Ett fel uppstod i väntan på servern, operationen kunde inte ha gjorts
+ Åtgärden kunte inte slutföras, servern är ej tillgänglig
+
+ Du har inga rättigheter %s
+ att döpa om denna fil
+ att radera denna fil
+ att dela denna fil
+ att avbryta delningen utav denna fil
+ att skapa filen
+ att ladda upp i den här mappen
+ Filen är inte längre tillgänglig på servern
+ Konton
+ Lägg till konto
+ Laddar data...
+ Autentisering krävs
+ Fel lösenord
+ Flytta
+ Ingenting här. Du kan skapa en mapp!
+ Välj
+ Gick inte att flytta. Vänligen kontrollera att filen existerar
+ att flytta den här filen
+ Säkerhet
diff --git a/res/values-sw-rKE/strings.xml b/res/values-sw-rKE/strings.xml
index c757504ac2..56e55a1dc9 100644
--- a/res/values-sw-rKE/strings.xml
+++ b/res/values-sw-rKE/strings.xml
@@ -1,2 +1,4 @@
-
+
+
+
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
new file mode 100644
index 0000000000..9cce7aeb8d
--- /dev/null
+++ b/res/values-ta-rIN/strings.xml
@@ -0,0 +1,34 @@
+
+
+ %1$s ஆனà¯à®±à®¾à®‡à®Ÿà¯ மெனà¯à®ªà¯Šà®°à¯à®³à¯
+ பதிபà¯à®ªà¯ எண௠%1$s
+ கணகà¯à®•à¯ˆ பà¯à®¤à¯à®ªà¯à®ªà®¿
+ பதிவேறà¯à®±à¯
+ பிற மெனà¯à®ªà¯Šà®°à¯à®³à¯à®•à®³à®¿à®²à¯ இரà¯à®¨à¯à®¤ ஆவணஙà¯à®•à®³à¯
+ கோபà¯à®ªà¯à®•à®³à¯
+ இதனà¯à®Ÿà®©à¯ திற
+ பà¯à®¤à®¿à®¯ கோபà¯à®ªà¯à®±à¯ˆ
+ அமைபà¯à®ªà¯à®•à®³à¯
+ விவரஙà¯à®•à®³à¯
+ அனà¯à®ªà¯à®ªà®µà¯à®®à¯
+ பொதà¯
+ மேலà¯à®®à¯
+ கணகà¯à®•à¯à®•à®³à¯
+ கணகà¯à®•à¯à®•à®³à¯ˆ நிரà¯à®µà®•à®¿
+ மெனà¯à®ªà¯Šà®°à¯à®³à¯ பதிவ௠எணà¯
+ உஙà¯à®•à®³à¯ வாடிகà¯à®•à¯ˆà®¯à®¾à®³à®°à¯ பாதà¯à®•à®¾à®•à¯à®•à®µà¯à®®à¯
+ உடனடி பà¯à®•à¯ˆà®ªà¯à®ªà®Ÿ பதிவேறà¯à®±à®®à¯
+ உடனடியாக கேமரா மூலம௠எடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ படஙà¯à®•à®³à¯ˆ பதிவேறà¯à®±à®®à¯ செயà¯à®¯à®µà¯à®®à¯
+ உடனடி காணொளி பதிவேறà¯à®±à®®à¯
+ உடனடியாக கேமரா மூலம௠எடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ காணொளிகளை பதிவேறà¯à®±à®®à¯ செயà¯à®¯à®µà¯à®®à¯
+ பதிவà¯à®•à®³à¯ˆ அனà¯à®®à®¤à®¿à®•à¯à®•à®µà¯à®®à¯
+ இத௠சிகà¯à®•à®²à¯à®•à®³à¯ˆ பதிவ௠செயà¯à®¯ பயனà¯à®ªà®Ÿà¯à®•à®¿à®©à¯à®±à®¤à¯
+ உளà¯à®¨à¯à®´à¯ˆà®µà¯ வரலாறà¯
+ இத௠பதிவà¯à®šà¯†à®¯à¯à®¯à®ªà¯à®ªà®Ÿà¯à®Ÿ பதிகைகள௠காடà¯à®Ÿà¯à®•à®¿à®±à®¤à¯
+ கோபà¯à®ªà¯à®•à®³à¯
+ பதிவேறà¯à®±à¯
+ விவரஙà¯à®•à®³à¯
+ அனà¯à®ªà¯à®ªà®µà¯à®®à¯
+
+ கணகà¯à®•à¯à®•à®³à¯
+
diff --git a/res/values-ta-rLK/strings.xml b/res/values-ta-rLK/strings.xml
index 9b888c445c..8dd0c7807e 100644
--- a/res/values-ta-rLK/strings.xml
+++ b/res/values-ta-rLK/strings.xml
@@ -3,7 +3,6 @@
பதிவேறà¯à®±à¯à®•
மறà¯à®± செயலிகளிலிரà¯à®¨à¯à®¤à¯ உளà¯à®³à®Ÿà®•à¯à®•à®®à¯
கோபà¯à®ªà¯à®•à®³à¯
- அடைவை உரà¯à®µà®¾à®•à¯à®•à¯à®•
அமைபà¯à®ªà¯à®•à®³à¯
விவரஙà¯à®•à®³à¯
பொதà¯à®µà®¾à®©
@@ -12,10 +11,7 @@
கணகà¯à®•à¯à®•à®³à¯ˆ நிரà¯à®µà®•à®¿à®•à¯à®•
App PIN
உஙà¯à®•à®³à¯à®Ÿà¯ˆà®¯ சேவைப௠பயனரை பாதà¯à®•à®¾à®•à¯à®•
- உடனடி பதிவேறà¯à®±à®²à¯ˆ இயலà¯à®®à¯ˆà®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®•
- கமராவினால௠எடà¯à®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®Ÿ படஙà¯à®•à®³à¯ உடனடியாக பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®©
உதவி
- சேவையக à®®à¯à®•à®µà®°à®¿
பயனாளர௠பெயரà¯
கடவà¯à®šà¯à®šà¯Šà®²à¯
கோபà¯à®ªà¯à®•à®³à¯
@@ -29,7 +25,7 @@
ஒர௠உளà¯à®³à®Ÿà®•à¯à®•à®®à¯à®®à¯ பெறபà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ. பதிவேறà¯à®±à¯à®µà®¤à®±à¯à®•à¯ ஒனà¯à®±à¯à®®à¯ இலà¯à®²à¯ˆ
பகிரபà¯à®ªà®Ÿà¯à®Ÿ உளà¯à®³à®Ÿà®•à¯à®•à®•à®™à¯à®•à®³à¯ˆ அணà¯à®•à¯à®µà®¤à®±à¯à®•à¯ %1$s அனà¯à®®à®¤à®¿à®•à¯à®•à®®à®¾à®Ÿà¯à®Ÿà®¾à®¤à¯
பதிவேறà¯à®±à®²à¯
- இநà¯à®¤ கோபà¯à®ªà¯à®±à¯ˆà®¯à®¿à®²à¯ எநà¯à®¤ கோபà¯à®ªà¯à®®à¯ இலà¯à®²à¯ˆ. \"பதிவேறà¯à®±à®²à¯\" படà¯à®Ÿà®¿ தெரிவ௠மூலம௠பà¯à®¤à®¿à®¯ கோபà¯à®ªà¯à®•à®³à¯ˆ பதிவேறà¯à®±à®®à¯à®Ÿà®¿à®¯à¯à®®à¯.
+ இஙà¯à®•à¯ ஒனà¯à®±à¯à®®à¯ இலà¯à®²à¯ˆ. à®à®¤à®¾à®µà®¤à¯ பதிவேறà¯à®±à¯à®•!
மேலதிக தகவலà¯à®•à®³à¯ˆ காடà¯à®šà®¿à®ªà¯à®ªà®Ÿà¯à®¤à¯à®¤à¯à®µà®¤à®±à¯à®•à¯ கோபà¯à®ªà®¿à®©à¯ மேல௠தடà¯à®Ÿà¯à®•.
அளவà¯:
வகை:
@@ -50,7 +46,7 @@
கணகà¯à®•à¯ˆ நீகà¯à®•à¯à®•
கணகà¯à®•à¯ˆ உரà¯à®µà®¾à®•à¯à®•à¯à®•
பதிவேறà¯à®±à®²à¯ படிவமà¯
- அடைவ௠பெயரà¯
+ கோபà¯à®ªà¯à®±à¯ˆ பெயரà¯
பதிவேறà¯à®±à®²à¯...
%1$d%% பதிவேறà¯à®±à®²à¯g %2$s
வெறà¯à®±à®¿à®•à®°à®®à®¾à®• பதிவேறà¯à®±à®ªà¯à®ªà®Ÿà¯à®Ÿà®¤à¯
@@ -95,8 +91,6 @@
நவீன கோபà¯à®ªà¯ˆ வைதà¯à®¤à®¿à®°à¯à®•à¯à®•à®µà¯à®®à¯
பெயரà¯à®®à®¾à®±à¯à®±à®®à¯
அகறà¯à®±à¯à®•
- உஙà¯à®•à®³à¯à®•à¯à®•à¯ உணà¯à®®à¯ˆà®¯à®¾à®• %1$s ஠அகறà¯à®±à®µà¯‡à®£à¯à®Ÿà¯à®®à®¾?
- உஙà¯à®•à®³à¯à®•à¯à®•à¯%1$s à®à®¯à¯à®®à¯ அதன௠உளà¯à®³à®Ÿà®•à¯à®•à®™à¯à®•à®³à¯ˆà®¯à¯à®®à¯ அகறà¯à®± வேணà¯à®Ÿà¯à®®à®¾?
உளà¯à®³à¯‚ர௠மடà¯à®Ÿà¯à®®à¯
இடதà¯à®¤à¯à®°à®¿ உளà¯à®³à®Ÿà®•à¯à®•à®™à¯à®•à®³à¯ மடà¯à®Ÿà¯à®®à¯
சேவையகதà¯à®¤à®¿à®²à®¿à®°à¯à®¨à¯à®¤à¯ அகறà¯à®±à¯à®•
@@ -108,7 +102,6 @@
பெயரà¯à®®à®¾à®±à¯à®±à®¤à¯à®¤à¯ˆ à®®à¯à®±à¯à®±à®¾à®• à®®à¯à®Ÿà®¿à®•à¯à®•à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ
தொலை கோபà¯à®ªà¯ˆ சரிபாரà¯à®•à¯à®•à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ
கோபà¯à®ªà¯ உளà¯à®³à®Ÿà®•à¯à®•à®™à¯à®•à®³à¯ à®à®±à¯à®•à®µà¯‡ ஒதà¯à®¤à®¿à®šà¯ˆà®•à¯à®•à®ªà¯à®ªà®Ÿà¯à®³à¯à®³à®©
- அடைவà¯à®•à®³à¯ˆ உரà¯à®µà®¾à®•à¯à®• à®®à¯à®Ÿà®¿à®¯à®µà®¿à®²à¯à®²à¯ˆ
சிறித௠நேரம௠காதà¯à®¤à®¿à®°à¯à®™à¯à®•à®³à¯
எதிரà¯à®ªà®¾à®°à®¾à®¤ பிரசà¯à®šà®¿à®©à¯ˆ ; தயவà¯à®šà¯†à®¯à¯à®¤à¯ கோபà¯à®ªà¯ˆ தெரிவà¯à®šà¯†à®¯à¯à®¯ மறà¯à®± செயலியை பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯
ஒர௠கோபà¯à®ªà¯à®®à¯ தெரிவà¯à®šà¯†à®¯à¯à®¯à®ªà¯à®ªà®Ÿà®µà®¿à®²à¯à®²à¯ˆ
@@ -141,4 +134,7 @@
இரணà¯à®Ÿà¯ˆà®¯à¯à®®à¯ வைகà¯à®•
மேலெழà¯à®¤à®²à¯
பதிவேறà¯à®± வேணà¯à®Ÿà®¾à®®à¯
+
+ கணகà¯à®•à¯à®•à®³à¯
+ தெரிவà¯à®šà¯†à®¯à¯à®•
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index b827eda283..ac0498268b 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -1,13 +1,18 @@
+ కొతà±à°¤ సంచయం
అమరికలà±
+ పంపించà±
మరినà±à°¨à°¿
సహాయం
- సేవకి à°šà°¿à°°à±à°¨à°¾à°®à°¾
వాడà±à°•à°°à°¿ పేరà±
సంకేతపదం
à°…à°µà±à°¨à±
కాదà±
+ సరే
à°°à°¦à±à°¦à±à°šà±‡à°¯à°¿
పొరపాటà±
+ సంచయం పేరà±
+ పంపించà±
+
diff --git a/res/values-tg-rTJ/strings.xml b/res/values-tg-rTJ/strings.xml
new file mode 100644
index 0000000000..56e55a1dc9
--- /dev/null
+++ b/res/values-tg-rTJ/strings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/res/values-th-rTH/strings.xml b/res/values-th-rTH/strings.xml
index 521ad4a874..0b141a1848 100644
--- a/res/values-th-rTH/strings.xml
+++ b/res/values-th-rTH/strings.xml
@@ -3,19 +3,17 @@
à¸à¸±à¸žà¹‚หลดไฟล์
เนื้à¸à¸«à¸²à¸ˆà¸²à¸à¹à¸à¸›à¸¯à¸à¸·à¹ˆà¸™à¹†
ไฟล์
- สร้างไดเร็à¸à¸—à¸à¸£à¸µà¹ˆ
+ โฟลเดà¸à¸£à¹Œà¹ƒà¸«à¸¡à¹ˆ
ตั้งค่า
รายละเà¸à¸µà¸¢à¸”
+ ส่ง
ทั่วไป
มาà¸
บัà¸à¸Šà¸µ
บริหารจัดà¸à¸²à¸£à¸šà¸±à¸à¸Šà¸µ
App PIN
ป้à¸à¸‡à¸à¸±à¸™à¹‚ปรà¹à¸à¸£à¸¡à¹„คลเà¸à¸™à¸•à¹Œ ขà¸à¸‡à¸„ุณ
- เปิดใช้งานระบบà¸à¸±à¸žà¹‚หลดได้ทันที
- à¸à¸±à¸žà¹‚หลดรูปภาพจาà¸à¸à¸¥à¹‰à¸à¸‡à¸‚ึ้นไปทันที
ช่วยเหลืà¸
- ที่à¸à¸¢à¸¹à¹ˆà¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸à¸£à¹Œ
ชื่à¸à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰
รหัสผ่าน
ไฟล์
@@ -29,7 +27,7 @@
ยังไม่ได้รับเนื้à¸à¸«à¸² ไม่มีà¸à¸°à¹„รให้ต้à¸à¸‡à¸à¸±à¸žà¹‚หลด
%1$s ไม่à¸à¸™à¸¸à¸à¸²à¸•à¹ƒà¸«à¹‰à¹€à¸‚้าถึงเนื้à¸à¸«à¸²à¸—ี่ถูà¸à¹à¸Šà¸£à¹Œà¹„ว้
à¸à¸³à¸¥à¸±à¸‡à¸à¸±à¸žà¹‚หลด
- ยังไม่มีไฟล์à¸à¸¢à¸¹à¹ˆà¹ƒà¸™à¹‚ฟลเดà¸à¸£à¹Œà¸™à¸µà¹‰.\nสามารถเพิ่มไฟล์ใหม่ได้จาà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸à¸à¹ƒà¸™à¹€à¸¡à¸™à¸¹ \"à¸à¸±à¸žà¹‚หลด\".
+ ยังไม่มีไฟล์ใดๆà¸à¸¢à¸¹à¹ˆà¸—ี่นี่ à¸à¸£à¸¸à¸“าà¸à¸±à¸žà¹‚หลดไฟล์!
à¹à¸•à¸°à¸—ี่ไฟล์ เพื่à¸à¹à¸ªà¸”งข้à¸à¸¡à¸¹à¸¥à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•à¸´à¸¡
ขนาด:
ชนิด:
@@ -45,12 +43,13 @@
ยà¸à¹€à¸¥à¸´à¸
บันทึภ& à¸à¸à¸
ข้à¸à¸œà¸´à¸”พลาด
+ ข้à¸à¸œà¸´à¸”พลาดที่ไม่ทราบสาเหตุ
เà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹€à¸£à¸²
เปลี่ยนรหัสผ่าน
ลบบัà¸à¸Šà¸µ
สร้างบัà¸à¸Šà¸µà¹ƒà¸«à¸¡à¹ˆ
à¸à¸±à¸žà¹‚หลดไฟล์จาà¸...
- ชื่à¸à¹„ดเร็à¸à¸—à¸à¸£à¸µà¹ˆ
+ ชื่à¸à¹‚ฟลเดà¸à¸£à¹Œ
à¸à¸³à¸¥à¸±à¸‡à¸à¸±à¸žà¹‚หลด...
%1$d%% à¸à¸³à¸¥à¸±à¸‡à¸à¸±à¸žà¹‚หลด %2$s
à¸à¸±à¸žà¹‚หลดเสร็จสิ้น
@@ -76,7 +75,6 @@
มีบางà¹à¸Ÿà¹‰à¸¡à¸‚้à¸à¸¡à¸¹à¸¥à¹„ม่สามารถย้ายได้
ต้นทาง: %1$s
ปลายทาง: %1$s
- ไม่มีพื้นที่เหลืà¸à¹€à¸žà¸µà¸¢à¸‡à¸žà¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸„ัดลà¸à¸à¹à¸Ÿà¹‰à¸¡à¸‚้à¸à¸¡à¸¹à¸¥à¸—ี่เลืà¸à¸à¹„ว้ไปที่โฟลเดà¸à¸£à¹Œ %1$s คุณต้à¸à¸‡à¸à¸²à¸£à¸¢à¹‰à¸²à¸¢à¸¡à¸±à¸™à¹à¸—นหรืà¸à¹„ม่
à¸à¸£à¸¸à¸“าใส่ PIN à¹à¸à¸›à¸‚à¸à¸‡à¸„ุณ
à¸à¸£à¸à¸à¸£à¸«à¸±à¸ª PIN ขà¸à¸‡ App
หมายเลข PIN ดังà¸à¸¥à¹ˆà¸²à¸§à¸ˆà¸°à¸–ูà¸à¸£à¹‰à¸à¸‡à¸‚à¸à¸—ุà¸à¸„รั้งที่เริ่มใช้งานà¹à¸à¸›à¸¯
@@ -104,8 +102,6 @@
ปรับปรุงไฟล์ให้ทันสมัยà¸à¸¢à¸¹à¹ˆà¹€à¸ªà¸¡à¸
เปลี่ยนชื่à¸
ลบà¸à¸à¸
- คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹à¸¥à¹‰à¸§à¸«à¸£à¸·à¸à¸§à¹ˆà¸²à¸•à¹‰à¸à¸‡à¸à¸²à¸£à¸¥à¸š %1$s?
- คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¹à¸¥à¹‰à¸§à¸«à¸£à¸·à¸à¸§à¹ˆà¸²à¸•à¹‰à¸à¸‡à¸à¸²à¸£à¸¥à¸š %1$s à¹à¸¥à¸°à¹€à¸™à¸·à¹‰à¸à¸«à¸²à¸—ี่à¸à¸¢à¸¹à¹ˆà¸‚้างในทิ้งไป?
เฉพาะเซิร์ฟเวà¸à¸£à¹Œà¸ ายในเท่านั้น
เนื้à¸à¸«à¸²à¸—ี่à¸à¸¢à¸¹à¹ˆà¹ƒà¸™à¹€à¸„รื่à¸à¸‡à¹€à¸—่านั้น
ลบà¸à¸à¸à¸ˆà¸²à¸à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸à¸£à¹Œ
@@ -117,7 +113,6 @@
ไม่สามารถเปลี่ยนชื่à¸à¹„ด้
ไม่สามารถตรวจสà¸à¸šà¹„ฟล์ระยะไà¸à¸¥à¹„ด้
เนื้à¸à¸«à¸²à¸‚à¸à¸‡à¹„ฟล์ถูà¸à¸œà¸ªà¸²à¸™à¸‚้à¸à¸¡à¸¹à¸¥à¸à¸¢à¸¹à¹ˆà¹à¸¥à¹‰à¸§
- ไม่สามารถสร้างไดเร็à¸à¸—à¸à¸£à¸µà¹ˆà¹„ด้
à¸à¸£à¸¸à¸“ารà¸à¸ªà¸±à¸à¸„รู่
เà¸à¸´à¸”ปัà¸à¸«à¸²à¸—ี่ไม่คาดคิด ; à¸à¸£à¸¸à¸“าลà¸à¸‡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸à¸›à¸¯à¸à¸·à¹ˆà¸™à¹† เพื่à¸à¹€à¸¥à¸·à¸à¸à¹„ฟล์
ไม่มีไฟล์ที่ถูà¸à¹€à¸¥à¸·à¸à¸
@@ -151,5 +146,8 @@
เà¸à¹‡à¸šà¹„ว้ทั้งสà¸à¸‡à¸à¸¢à¹ˆà¸²à¸‡
เขียนทับ
ไม่ต้à¸à¸‡à¸à¸±à¸žà¹‚หลด
- %1$s ไม่สามารถถูà¸à¸„ัดลà¸à¸à¹„ปที่ %2$s ไดเรà¸à¸—à¸à¸£à¸µà¸—้à¸à¸‡à¸–ิ่น
+ ส่ง
+
+ บัà¸à¸Šà¸µ
+ เลืà¸à¸
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index b6c88bd5e7..e5bfe93dea 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -3,24 +3,27 @@
%1$s Android Uygulaması
sürüm %1$s
Hesabı yenile
- Dosya yükle
+ Yükle
Diğer uygulamalardan içerik
Dosyalar
- ile aç
- Klasör oluştur
+ Birlikte aç
+ Yeni klasör
Ayarlar
- Detaylar
+ Ayrıntılar
+ Gönder
Genel
Daha fazla
Hesaplar
- Hesapları yönet
- App PIN
+ Hesapları Yönet
+ Uygulama PIN\'i
Ä°stemcinizi koruyun
- Anında yükleme etkinleştir
- Anında çekilen fotoğrafları yükle
- Günlük tutmayı etkinleştir
+ Anında fotoğraf yüklemeleri
+ Kamera ile çekilen fotoğrafları anında yükle
+ Anında video yüklemeleri
+ Kamera ile çekilen videoları anında yükle
+ Günlük Tutmayı Etkinleştir
Bu, sorunları günlük dosyasına kaydetmek için kullanılır
- Günlük geçmişi
+ Günlük Geçmişi
Bu, kayıtlı günlük dosyalarını görüntüler
Geçmişi Sil
Yardım
@@ -28,40 +31,44 @@
Geribildirim
Ä°zlenim
%1$s uygulamasını akıllı telefonunda dene!
- Sana, akıllı telefonunda kullanmak üzere %1$s daveti yapıyorum!\nBuradan indirebilirsin: %2$s
- Sunucuyu kontrol et
- Sunucu Adresi
- Kullanıcı Adi:
- Åžifre:
- %1$s senin için yeni mi?
+ Seni, akıllı telefonunda %1$s kullanmaya davet ediyorum!\nBuradan indirebilirsin: %2$s
+ Sunucuyu Denetle
+ Sunucu adresi https://…
+ Kullanıcı Adı
+ Parola
+ %1$s sizin için yeni mi?
Dosyalar
BaÄŸlan
Yükle
- Yükleme dizinini seçiniz:
- Hesap bulunamadi
- Cihazınızda %1$s hesabı bulunmamaktadır. Lütfen öncelikle bir hesap ayarı giriniz.
+ Yükleme klasörünü seçin:
+ Hesap bulunamadı
+ Cihazınızda %1$s hesabı bulunmamaktadır. Lütfen öncelikle bir hesap ayarlayın.
Kurulum
Çıkış
Yüklenecek içerik yok
- Yüklenecek içerik yok. Yüklenecek dosya yok.
- %1$s, paylaşılan içeriğe erişim izni vermiyor
+ Hiç içerik alınmadı. Yüklenecek hiçbir şey yok.
+ %1$s için paylaşılan içeriğe erişim izni yok
Yükleniyor
- Klasörde dosya yok. Yeni dosyalar yükle\'ye tıklayarak eklenebilir.
- Ek bilgileri görmek için dosyaya tıklayınız.
+ Burada hiçbir şey yok. Bir şeyler yükleyin!
+ Yükleniyor...
+ Bu klasörde dosya yok.
+ Ek bilgileri görmek için dosyaya dokunun.
Boyut:
Tür:
OluÅŸturulma:
- DeÄŸiÅŸtirme:
+ DeÄŸiÅŸtirilme:
Ä°ndir
Dosyayı yenile
Dosya adı, yükleme sırasında %1$s olarak değiştirildi
+ Paylaşma bağlantısı
+ Bağlantı paylaşımını kaldır
Evet
Hayır
- OK
+ Tamam
Ä°ndirmeyi iptal et
Yüklemeyi iptal et
Ä°ptal
- Kaydet %amp; Kapat
+ Kaydet ve Çık
Hata
Yükleniyor...
Bilinmeyen hata
@@ -69,31 +76,34 @@
Parola deÄŸiÅŸtir
Hesabı sil
Hesap oluÅŸtur
- ... dan dosya yükle
- Dizin ismi
- Yüklüyor ...
- %1$d%% Yükleniyor %2$s
+ Şuradan yükle...
+ Klasör adı
+ Yükleniyor...
+ %%%1$d Yüklenen: %2$s
Yükleme başarılı
- %1$s kadarı başarıyla yüklendi.
+ %1$s başarıyla yüklendi
Yükleme başarısız
- %1$s yüklenmedi tamamlanamadı
- Ä°ndiriyor ...
- %1$d%% Ä°ndiriliyor %2$s
+ %1$s yüklenmesi tamamlanamadı
+ Yükleme başarısız, yeniden oturum açmalısınız
+ Ä°ndiriliyor...
+ %%%1$d Ä°ndirilen: %2$s
İndirme başarılı
%1$s başarıyla indirildi
- İndirilme başarısız
- %1$s indirilmesi tamamlanamadı
+ İndirme başarısız
+ %1$s indirmesi tamamlanamadı
Henüz indirilemedi
- Hesap seçiniz
+ İndirme başarısız, yeniden oturum açmalısınız
+ Hesap seçin
Eşitleme başarısız
- %1$s Senkronizasyonu tamamlanamadı
+ Eşitleme başarısız, yeniden oturum açmalısınız
+ %1$s eşitlemesi tamamlanamadı
%1$s için geçersiz parola
Çakışma bulundu
- %1$d korumalı senkronizasyon dosyası, senkronize edilemedi
- Korunan dosya senkronizasyonu başarısız
- %1$d dosya senkronize edilemedi (%2$d hata)
+ %1$d eşit tut dosyası, eşitlenemedi
+ Dosyaları eşit tut işlemi başarısız
+ %1$d dosya eşitlenemedi (%2$d çakışma)
Bazı yerel dosyalar unutuldu
- %1$d dosyalar %2$s dizinine kopyalanamadı
+ %2$s klasöründeki %1$d dosya şuraya kopyalanamadı
1.3.16 sürümünden sonra, bu aygıttan yüklenen dosyalar bir dosya birden fazla hesapla eşitlendiğinde veri kaybının önlenebilmesi için %1$s yerel klasörüne kopyalanır.\n\nBu değişiklikten dolayı, bu uygulamanın yüklenmiş tüm önceki sürümündeki dosyalar %2$s klasörüne kopyalandı. Ancak hesap eşitlenmesi sırasında bu işlemin tamamlanmasını engelleyen bir hata oluştu. Dosyayı/dosyaları olduğu gibi bırakabilir ve %3$s bağlantısını kaldırabilirsiniz veya dosyayı/dosyaları %1$s dizinine taşıyıp %4$s bağlantılarını koruyabilirsiniz.\n\nAşağıda listelenenler yerel dosyalar ve bağlı oldukları %5$s içerisindeki uzak dosyalardır.
%1$s klasörü artık mevcut değil.
Tümünü taşı
@@ -101,53 +111,54 @@
Bazı dosyalar taşınamadı
Yerel: %1$s
Uzak: %1$s
- Seçilen dosyaları %1$s dizinine kopyalamak için yeterli alan yok. Bunun yerine dosyayı taşımak ister misiniz?
- Lütfen uygulama PIN\'ınızı giriniz
- App PIN giriniz
+ Seçilen dosyaları %1$s dizinine kopyalamak için yeterli alan yok. Bunun yerine dosyayı içine taşımak ister misiniz?
+ Lütfen uygulama PIN\'inizi girin
+ Uygulama PIN\'inizi girin
PIN uygulama yeniden başladığında tekrar sorulacak
- Lütfen, App PIN ni tekrar giriniz
- App PIN\'nizi kaldırınız.
- Her iki App PIN aynı değil.
- Yanlış App PIN
- App PIN kaldırıldı
- App PIN saklandı
+ Lütfen, uygulama PIN\'inizi tekrar girin
+ Uygulama PIN\'inizi kaldırın
+ Her iki Uygulama PIN\'i aynı değil
+ Yanlış Uygulama PIN\'i
+ Uygulama PIN\'i kaldırıldı
+ Uygulama PIN\'i saklandı
%1$s müzik çalar
%1$s (oynatılıyor)
%1$s (yükleniyor)
- %1$s yeniden oynatım sonlandırıldı
- Herhangi bir medya öğesi bulunamadı
+ %1$s oynatma tamamlandı
+ Herhangi bir ortam ögesi bulunamadı
Tanımlı hesap yok
- Dosya doÄŸru bir hesapta deÄŸil
- Codec desteklenmiyor
- Medya öğesi okunamadı
- Medya öğesi doğru bir şekilde kodlanmadı
- Oynatmaya çalışırken zaman aşımına uğradı
- Medya öğesi aktarılamadı
+ Dosya geçerli bir hesapta değil
+ Ortam kod çözücü desteklenmiyor
+ Ortam ögesi okunamadı
+ Ortam ögesi doğru bir şekilde kodlanmamış
+ Oynatmaya çalışılırken zaman aşımına uğradı
+ Ortam ögesi akışı yapılamıyor
Ortam dosyası mevcut ortam oynatıcı ile çalınamaz
%1$s oynatılmaya çalışılırken güvenlik hatası oluştu
%1$s oynatılmaya çalışılırken girdi hatası oluştu
%1$s oynatılmaya çalışılırken beklenmeyen bir hata oluştu
- BaÅŸa sar butonu
- Oynat veya duraklat butonu
- Hızlı ileri butonu
- Giriş için deneniyor
+ Başa sar düğmesi
+ Oynat veya duraklat düğmesi
+ Hızlı ileri düğmesi
+ Kimlik doğrulama alınıyor...
+ Oturum açma deneniyor...
Ağ bağlantısı yok
- Günvenli bağlantı mevcut değil.
+ Güvenli bağlantı mevcut değil.
Bağlantı kuruldu
- Bağlantı kontrol ediliyor ...
- Hatalı sunucu ayarı.
+ Bağlantı kontrol ediliyor...
+ Hatalı sunucu yapılandırması
Cihazda aynı kullanıcı adı ve sunucu için bir hesap zaten mevcut
Girilen kullanıcı bu hesabın kullanıcısı ile eşleşmiyor
- Bilinmeyen hata oluÅŸtu.
- Anabilgisayar bulunamadı
- sunucu servisi bulunamadı.
+ Bilinmeyen hata oluÅŸtu!
+ Ana makine bulunamadı
+ Sunucu örneği bulunamadı
Sunucu çok geç cevap veriyor
Hatalı biçimlendirilmiş URL
- SSL başlatılmasında hata
+ SSL başlatma başarısız
SSL sunucu kimliği doğrulanamadı
Bilinmeyen sunucu sürümü
Bağlantı kurulamadı
- Güvenli bağlantı sağlandı.
+ Güvenli bağlantı sağlandı
Hatalı kullanıcı adı veya parola
Kimlik doğrulama başarısız oldu
Erişim, kimlik doğrulama sunucusu tarafından reddedildi
@@ -158,33 +169,39 @@
Kimlik doğrulama sunucusuna bağlanılıyor...
Sunucu bu kimlik doğrulama yöntemini desteklemiyor
%1$s çoklu hesapları desteklemiyor
- Dosyayı güncel tut
- Ä°sim deÄŸiÅŸtir.
+ Sunucunuz geçerli bir kullanıcı kimliği döndürmüyor, lütfen yöneticinizle iletişime geçin
+
+ Bu sunucuya karşı kimlik doğrulama yapılamaz
+ Dosyayı güncel tut
+ Yeniden adlandır
Kaldır
- %1$s ları gerçekten kaldırmak istiyor musunuz ?
- Gerçekten %1s ve içeriğini silmek istediğinizden emin misiniz?
+ Gerçekten %1$s dosyasını kaldırmak istiyor musunuz?
+ Gerçekten %1$s ve içeriğini kaldırmak istediğinizden emin misiniz?
Sadece yerel
Sadece yerel içerik
Sunucudan kaldır
- Uzaktaki ve yereldeki
+ Uzak ve yerel
Kaldırma başarılı
- Kaldırma tamamlanamıyor
+ Kaldırma başarısız
Yeni bir isim girin
- Yerel kopya adlandırılamaz; farklı bir ad deneyin
- Yeniden adlandırılma tamamlanmadı
- Dosya teslim edilemedi
- Dosyalar başarıyla senkronize edildi
- Dizin oluşturulamadı
+ Yerel kopya adlandırılamadı; farklı bir ad deneyin
+ Yeniden adlandırılma tamamlanamadı
+ Uzak dosya denetlenemedi
+ Dosya içerikleri zaten eşitlenmiş
+ Klasör oluşturulamadı
+ Yasaklı karakterler: / \\ < > : \" | ? *
+ Dosya adı boş olamaz
Bir süre bekleyin
- Beklenmeyen problem ; lütfen, dosya seçmek için diğer uygulamayı deneyin
+ Beklenmedik sorun; lütfen dosya seçmek için farklı bir uygulama kullanın
Hiçbir dosya seçilmedi
+ Bağlantıyı gönder ...
oAuth2 ile oturum aç
oAuth2 sunucusuna bağlanılıyor…
Bu sitenin sertifikası doğrulanamadı
- - Sunucu sertifikası güvenilmez
- - Sunucu sertifikasının süresi geçmiş
- Sunucu sertifikasının geçerli olacağı tarih
- - URL adresi sunucu isminin sertifikası ile uyuşmuyor
+ - Sunucu sertifikasına güvenilmiyor
+ - Sunucu sertifikasının süresi dolmuş
+ - Sunucu sertifikasının geçerlilik tarihi ileride
+ - Adres, sertifikadaki sunucu adı ile eşleşmiyor
Sertifikaya yine de güvenmek istiyor musunuz?
Sertifika kaydedilemedi
Ayrıntılar
@@ -192,41 +209,76 @@
Verilen:
Veren:
Ortak ad:
- Organizasyon:
- Organizasyon birimi:
+ Kurum:
+ KuruluÅŸ birimi:
Ãœlke:
Eyalet:
Konum:
Geçerlilik:
- Kimden:
- Kime:
+ Başlangıç:
+ BitiÅŸ:
Ä°mza:
Algoritma:
+ Sertifika gösterilemedi.
+ - Hata hakkında bilgi yok
Bu bir yer tutucudur
yertutucu.txt
PNG Resmi
389 KB
2012/05/18 12:23 ÖS
12:23:45
- Resimleri sadece WiFi bağlantısında yükle
+ Fotoğrafları sadece kablosuzda (WiFi) yükle
+ Videoları sadece kablosuzda (WiFi) yükle
/AnındaYükle
Çakışmayı güncelle
- Uzaktaki %s dosyası, yerel dosya ile senkronize edilemedi. işleme devam etmek sunucudaki dosyanın içeriğini değiştirecektir.
+ Uzaktaki %s dosyası, yerel dosya ile eşitlenemedi. İşleme devam etmek sunucudaki dosyanın içeriğini değiştirecektir.
Ä°kisini de koru
Ãœzerine yaz
Yükleme
- Görüntü önizleme
- Bu resim gösterilemez
- %1$s, %2$s yerel dizine kopyalanamadı
- AnındaYükleme\" başarısız
- Anında yüklemeler başarısız
- Başarısız olan tüm anında yüklemelerin özeti
- hepsini seç
- tüm seçili olanları tekrar dene
- yükleme kuyruğundaki tüm seçili olanları sil
- Resmi yeniden yüklemeyi dene:
- Daha fazla Görsel yükle
- anında yükleme için çevrimiçi değilsiniz, bir şey yapma
- Hata Mesajı:
- Sunucu yapılandırmanızı kontrol edin. Kotanızı aşmış olabilirsiniz.
+ Resim önizleme
+ Bu resim gösterilemiyor
+ %1$s, %2$s yerel klasörüne kopyalanamadı
+ Yükleme Yolu
+ Üzgünüz, paylaşım sunucunuzda etkin değil. Lütfen yöneticinizle
+ iletişime geçin.
+ Paylaşma başarısız. Lütfen dosyanın mevcut olup olmadığını denetleyin
+ Bu dosya veya klasörü paylaşmaya çalışılırken bir hata oluştu
+ Paylaşımı kaldırma başarısız. Lütfen dosyanın mevcut olup olmadığını denetleyin
+ Bu dosya veya klasör paylaşımı kaldırılmaya çalışılırken bir hata oluştu
+ Gönder
+ Bağlantıyı kopyala
+ Panoya kopyalandı
+ Ciddi hata: işlem gerçekleştirilemiyor
+ Sunucuya bağlanılırken bir hata oluştu.
+ Sunucu beklenirken bir hata oluştu, işlem yapılamadı
+ Sunucu beklenirken bir hata oluştu, işlem yapılamadı
+ İşlem tamamlanamadı, sunucu kullanılamıyor
+
+ %s izniniz yok
+ Bu dosyayı adlandırma
+ Bu dosyayı silme
+ Bu dosyayı paylaşma
+ Bu dosya paylaşımını kaldırma
+ Dosya oluÅŸturma
+ Bu klasöre yükleme
+ Bu dosya artık sunucuda mevcut değil
+ Hesaplar
+ Hesap ekle
+ Güvenli bağlantı, güvenli olmayan bir rotaya yönlendirildi.
+ Günlükler
+ Geçmişi Gönder
+ ownCloud Android uygulama kayıtları
+ Veri yükleniyor...
+ Kimlik doÄŸrulama gerekli
+ Hatalı parola
+ Taşı
+ Burada bir şey yok. Bir klasör ekleyebilirsiniz!
+ Seç
+ Taşıma başarısız. Lütfen dosyanın mevcut olup olmadığını denetleyin
+ Klasörü, kendi alt klasörüne taşımak mümkün değil
+ Dosya zaten hedef klasörde mevcut
+ Bu dosya veya klasörü taşımaya çalışılırken bir hata oluştu
+ bu dosyayı taşımak için
+ Anında Yüklemeler
+ Güvenlik
diff --git a/res/values-ug/strings.xml b/res/values-ug/strings.xml
index 41798ce20d..e1140f871b 100644
--- a/res/values-ug/strings.xml
+++ b/res/values-ug/strings.xml
@@ -2,14 +2,14 @@
يۈكلە
ھۆججەتلەر
- مۇندەرىجە قۇر
+ ÙŠÛÚÙ‰ قىسقۇچ
تەÚشەكلەر
+ يوللا
ئادەتتىكى
تÛخىمۇ ÙƒÛ†Ù¾
Ú¾Ûساباتلار
ياردەم
قايتۇرما ئىنكاس
- مۇلازىمÛتىر ئادرىسى
ئىشلەتكۈچى ئاتى
ئىم
ھۆججەتلەر
@@ -19,6 +19,7 @@
تەÚØ´Û•Ùƒ
Ú†Ûكىن
يۈكلەۋاتىدۇ
+ بۇ جايدا Ú¾ÛÚ†Ù†ÛÙ…Û• يوق. Upload something!
Ú†ÙˆÚلۇقى:
تىپى:
قۇرۇلغان ۋاقتى:
@@ -33,8 +34,12 @@
خاتالىق
يوچۇن خاتالىق
ئىم ئۆزگەرت
- مۇندەرىجە ئىسمى
+ قىسقۇچ ئاتى
Ú¾Ûسابات تاللاÚ
ئات ئۆزگەرت
چىقىرىۋەت
+ يوللا
+
+ Ú¾Ûساباتلار
+ بىخەتەرلىك
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 749321ea33..d927e39fe5 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -1,28 +1,46 @@
+ %1$s Android App
+ верÑÑ–Ñ %1$s
+ Оновити account
Відвантажити
ВміÑÑ‚ із інших програм
Файли
- Створити теку
+ Відкрити за допомогою
+ Ðова тека
ÐалаштуваннÑ
Деталі
+ ÐадіÑлати
ОÑновне
Більше
Облікові запиÑи
Ð£Ð¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ð¾Ð±Ð»Ñ–ÐºÐ¾Ð²Ð¸Ð¼Ð¸ запиÑами
App програмний PIN
ЗахиÑÑ‚ Вашог App клієнта
- Включити негайне завантаженнÑ
- Ðегайно завантажувати фото, зроблені камерою
+ Миттєві зображеннÑ
+ Миттєві Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð· камери
+ Миттєві відео
+ Миттєві відео з камери
+ Ввімкнути журнал
+ ВикориÑтовуєтьÑÑ Ð´Ð»Ñ Ñ€ÐµÑ”Ñтрації помилок
+ Журнал
+ Тут показані запиÑи журналу
+ Видалити Ñ–Ñторію запиÑів
Допомога
+ Порадити товаришу
Зворотній зв\'Ñзок
Відбиток
- ÐдреÑа Ñервера
+ Спробуйте %1$s на Ñвоєму Ñмартфоні!
+ Пропоную вам кориÑтуватиÑÑ %1$s на вашому Ñмартфоні!\nЗавантажити можна за поÑиланнÑм: %2$s
+ Перевірити Ñервер
+ ÐдреÑа Ñерверу https://…
Ім\'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача
Пароль
+ Вперше в %1$s?
Файли
З\'єднати
Відвантажити
+ Оберіть теку Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ:
Ðе знайдено облікового запиÑу
Ðа Вашому приÑтрої відÑутні облікові запиÑи %1$s. Будь лаÑка, Ñпочатку Ñтворіть запиÑ.
ÐалаштуваннÑ
@@ -31,14 +49,19 @@
Ðе отримано даних. Ðічого завантажувати.
%1$s не може отримати доÑтуп до Ñпільного контенту
ЗавантаженнÑ
- Ð’ цьому каталозі відÑутні файли.\nÐові файли можна додати через опцію меню \"ЗавантаженнÑ\".
+ Тут нічого немає. Відвантажте що-небудь!
+ ЗавантаженнÑ...
+ В цій теці немає файлів.
ÐатиÑніть на файлі Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð¾Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð¾Ñ— інформації
Розмір:
Тип:
Створено:
Змінено:
Завантажити
+ Оновити файл
Файл був переіменований в %1$s протÑгом вивантаженнÑ
+ Опублікувати поÑиланнÑ
+ Видалити поÑиланнÑ
Так
ÐÑ–
OK
@@ -47,6 +70,7 @@
Відмінити
Зберегти & Вихід
Помилка
+ ЗавантаженнÑ...
Ðевідома помилка
Про
Змінити пароль
@@ -60,21 +84,28 @@
%1$s було уÑпішно завантажено
Помилка завантаженнÑ
Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ %1$s не може завершитиÑÑŒ
+ Завантажити не вдалоÑÑ, необхідно повторити вхід
Ð—ÐºÐ°Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ â€¦
%1$d%% Ð—ÐºÐ°Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ %2$s
УÑпішно зкачано
%1$s уÑпішно завантажено
Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ
Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ %1$s не вдаєтьÑÑ Ð·Ð°Ð²ÐµÑ€ÑˆÐ¸Ñ‚Ð¸
+ Ще не завантажене
+ Зберегти не вдалоÑÑ, необхідно повторити вхід
Оберіть обліковий запиÑ
Помилка Ñинхронізації
+ Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð½Ðµ вдалаÑÑ, необхідно повторити вхід
Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ %1$s не вдалаÑÑŒ
+ Ðевірний пароль Ð´Ð»Ñ %1$s
Конфліктів знайдено
%1$d файли, Ñкі мають бути Ñинхронізованими не можуть ÑинхронізуватиÑÑ
Синхронізувати файли не вдалоÑÑ
ЗміÑÑ‚ %1$d файлів не може бути Ñинхронізований (%2$d конфліктів)
ДеÑкі локальні файли були забуті
- %1$d файлів з каталогу %2$s не можуть бути в нього Ñкопійовані
+ Ðеможливо Ñкопіювати %1$d файли з теки %2$s
+ \"Починаючи з верÑÑ–Ñ— 1.3.16, файли, завантажені з цього приÑтрою копіюютьÑÑ Ð² локальну теку %1$s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð±Ñ–Ð³Ð°Ð½Ð½Ñ Ð²Ñ‚Ñ€Ð°Ñ‚Ð¸ даних під Ñ‡Ð°Ñ Ñинхронізації одного файлу з кількома обліковими запиÑами.\n\nТому вÑÑ– файли, завантажені в попередніх верÑÑ–ÑÑ… цього додатку були Ñкопійовані в теку %2$s. Однак, під Ñ‡Ð°Ñ Ñинхронізації ÑталаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°. Ви можете залишити файл(и) Ñк Ñ” та видалити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° %3$s, або переміÑтити файл(и) в директорію %1$s Ñ– зберегти поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° %4$s.\n\nÐижче наведені локальні та віддалені файли у %5$s з Ñкою вони були пов\'Ñзані.
+ Тека %1$s білше не Ñ–Ñнує
ПереміÑтити вÑе
Ð’ÑÑ– файли були переміщені
ДеÑкі файли не можуть бути переміщені
@@ -90,26 +121,62 @@
Ðе вірний App програмний PIN
App програмний PIN видалено
App програмний PIN збережено
+ %1$s музичний плеєр
+ %1$s (відтвореннÑ)
+ %1$s (завантаженнÑ)
+ %1$s Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ðµ
+ Медіа-файлів не знайдено
+ Обліковий Ð·Ð°Ð¿Ð¸Ñ Ð½Ðµ налаштований
+ Файл в невірному обліковому запиÑÑ–
+ Кодек не підтримуєтьÑÑ
+ Медіа-файл не читаєтьÑÑ
+ Медіа-файл невірно закодований
+ Вийшов Ñ‡Ð°Ñ Ð½Ð° Ñпробу відтвореннÑ
+ Ðеможливо потоком відтворити файл
+ Медіа-файл неможливо відтворити вбудованим програвачем
+ Помилка безпеки при відтворені %1$s
+ Помилка вводу при відтворені %1$s
+ ÐеÑподівана помилка при відтворені %1$s
+ Перемтка назад
+ Ð’Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ пауза
+ Перемотка вперед
+ ВиконуєтьÑÑ Ð²Ñ…Ñ–Ð´...
Спроба входу…
ВідÑутнє Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ мережі
Безпечне з\'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð½Ðµ доÑтупне.
З\'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð²Ñтановлено
Перевірка з\'єднаннÑ…
Ðе вірні Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñервер
+ Такий обліковий Ð·Ð°Ð¿Ð¸Ñ Ð²Ð¶Ðµ Ñ–Ñнує на приÑтрої
+ Введений кориÑтувач не відповідає обліковому запиÑу
Виникла невідома помилка!
Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ хоÑÑ‚
Ðе знайдено примірник Ñервер
Сервер занадто довго не відповідає
Пошкоджений URL
Помилка SSL ініціалізації
+ Ðеможливо перевірити SSL-Ñертифікат Ñервера
Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ верÑÑ–ÑŽ Ñервер Ñерверу
Ðе вдалоÑÑ Ð²Ñтановити з\'єднаннÑ
Ð’Ñтановлено захищене з\'єднаннÑ
+ Ðевірне ім\'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача або пароль
+ Ðевдала авторизаціÑ
+ ДоÑтуп заборонений Ñервером авторизації
+ ÐеÑподівана відповідь; будь лаÑка, введіть адреÑу Ñервера знову
+ Ð§Ð°Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ñ–Ñ— минув. Будь лаÑка, увійдіть знову
+ Будь лаÑка, введіть пароль
+ Ð§Ð°Ñ ÑеÑÑ–Ñ— минув. Будь лаÑка, підключітьÑÑ Ð·Ð½Ð¾Ð²
+ ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Ñерверу аутентифікації...
+ Сервер не підтримує обраний метод аутентифікації
+ %1$s не підтримує одночаÑно декілька облікових запиÑів
+ Ваш Ñервер не повертає коректний ідентифікатор кориÑтувача, будь лаÑка звернітьÑÑ Ð´Ð¾ адмініÑтратора
+⇥
+ ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ Ð½Ð° цьому Ñервері неможлива
Оновлювати файл
Перейменувати
Видалити
- Ви дійÑно бажаєте видалити %1$s ?
- Ви дійÑно бажаєте видалити %1$s Ñ– його зміÑÑ‚ ?
+ Ви дійÑно бажаєте видалити %1$s?
+ Ви дійÑно бажаєте видалити %1$s та веÑÑŒ вміÑÑ‚?
Лише локально
Лише локальний зміÑÑ‚
Видалити із Ñерверу
@@ -122,9 +189,14 @@
Ðеможливо перевірити віддалений файл
ЗміÑÑ‚ файлу вже Ñинхронізовано
Ðе вдалоÑÑ Ñтворити теку
+ Заборонені Ñимволи: / \\ < > : \" | ? *
+ Ім\'Ñ Ñ„Ð°Ð¹Ð»Ñƒ не може бути порожнім.
Зачекайте хвилинку
ÐеÑподівані проблеми ; будь лаÑка, Ñпробуйте викориÑтати іншу програму Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ файлу
Ðе обрано файл
+ ÐадіÑлати поÑиланнÑ...
+ Увійти через oAuth2
+ ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Ñерверу oAuth2...
Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ ідентифікацію Ñайта
- Ðе довірений Ñертифікат Ñерверу
- Сертифікат Ñерверу втратив чинніÑÑ‚ÑŒ
@@ -147,13 +219,65 @@
До:
ПідпиÑ:
Ðлгоритм:
+ Ðе вдалоÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚Ð¸ Ñертифікат.
+ - Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ помилку відÑутнÑ
Це заповнювач
+ placeholder.txt
+ PNG зображеннÑ
+ 389 КБ
+ 2012/05/18 12:23 PM
+ 12:23:45
Завантажувати Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ через WiFi
+ Завантажувати відео тільки через WiFi
/InstantUpload
Конфлікт оновленнÑ
Віддалений файл %s не Ñинхронізовано з локальним. ÐŸÑ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÐ´ÑƒÑ€Ð¸ замінить вміÑÑ‚ файлу на Ñервері.
Залишити обидва
Замінити
Ðе завантажувати
- %1$s неможливо Ñкопіювати в локальний каталог %2$s
+ Попередній переглÑд зображеннÑ
+ Ðе вдалоÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚Ð¸ зображеннÑ
+ %1$s неможливо Ñкопіювати до %2$s
+ Завантажити шлÑÑ…
+ Ðа жаль, обмін не включений на вашому Ñервері. Будь лаÑка, зв\'ÑжітьÑÑ Ð· вашим адміниÑтратором.
+ Ðеможливо поділитиÑÑ. Будь лаÑка, перевірте, чи Ñ–Ñнує файл
+ Виникла помилка при Ñпробі поділитиÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ або текою
+ Ðеможливо заборонити доÑтуп. Будь лаÑка, перевірте, чи Ñ–Ñнує файл
+ Виникла помилка при Ñпробі заборонити доÑтуп до файлу або теки
+ ÐадіÑлати
+ Копіювати поÑиланнÑ
+ Скопійовано в буфер обміну
+ Критична помилка: Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ— неможливе
+ Виникла помилка при підключені до Ñервера.
+ Під Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ñервер виникла помилка, операцію неможливо завершити
+ Під Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° Ñервер виникла помилка, операцію неможливо завершити
+ Ðеможливо завершити операцію, Ñервер недоÑтупний
+
+ У Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” повноважень %s
+ на Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файла
+ на Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файла
+ Ð´Ð»Ñ Ð½Ð°Ð´Ð°Ð½Ð½Ñ Ð´Ð¾Ñтупу до файла
+ Ð´Ð»Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð´Ð¾Ñтупу до файла
+ Ð´Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð°
+ Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð² цю теку
+ Файл більше не доÑтупний на Ñервері
+ Облікові запиÑи
+ Додати обліковий запиÑ
+ Безпечне Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÑєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· незабезпечений маршрут.
+ Журнали
+ ÐадіÑлати Ñ–Ñторію
+ Журнали Android-додатка ownCloud
+ Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…...
+ Потрібна аутентифікаціÑ
+ Ðевірний пароль
+ ПереміÑтити
+ Тут нічого немає. Ви можете додати теку!
+ Обрати
+ Ðеможливо переміÑтити. Будь лаÑка, перевірте, чи Ñ–Ñнує файл
+ Ðеможливо переміÑтити теку до теки-нащадка
+ Файл вже Ñ–Ñнує в теці призначеннÑ
+ Виникла помилка при Ñпробі переміÑтити файл або теку
+ переміÑтити цей файл
+ Миттєво завантаженнÑ
+ Безпека
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index a96fe56dac..1532b7acbd 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -1,11 +1,21 @@
سیٹینگز
+ بھجیں
+ مزید
مدد
یوزر نیم
پاسورڈ
+ منسلک
+ ڈاؤن لوڈ،
+ اشتراک لنک
Ûاں
Ù†Ûیں
+ اوکے
منسوخ کریں
ایرر
+ غیر معرو٠خرابی
+ بھجیں
+
+ منتخب کریں
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
new file mode 100644
index 0000000000..63dbc495ac
--- /dev/null
+++ b/res/values-ur/strings.xml
@@ -0,0 +1,5 @@
+
+
+ خرابی
+
+
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index c757504ac2..56e55a1dc9 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -1,2 +1,4 @@
-
+
+
+
diff --git a/res/values-v11/versioned_styles.xml b/res/values-v11/versioned_styles.xml
index 75cfb9b776..ab237e8426 100644
--- a/res/values-v11/versioned_styles.xml
+++ b/res/values-v11/versioned_styles.xml
@@ -6,4 +6,17 @@
- @color/button_text_color
+
+
+
+
+
+
diff --git a/res/values-v9/versioned_styles.xml b/res/values-v9/versioned_styles.xml
new file mode 100644
index 0000000000..57bb396f5d
--- /dev/null
+++ b/res/values-v9/versioned_styles.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 859c483427..122092d1ab 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -10,29 +10,31 @@
Tạo thư mục
Cà i đặt
Chi tiết
+ Gởi
Tổng hợp
hơn
Tà i khoản
Quản lý tà i khoản
Mã PIN ứng dụng App
Bảo vệ App client của bạn
- KÃch hoạt tÃnh năng tải lên ngay láºp tức
- Ngay láºp tức tải lên các hình ảnh được chụp bởi camera
Báºt chế Ä‘á»™ nháºt trình
Äược sá» dụng cho các vấn Ä‘á» liên quan đến nháºt trình
Nháºt trình dữ kiện
Hiển thị các nháºt trình đã được ghi nháºn lại
Xóa lịch sá»
Giúp đỡ
+ Giới thiệu đến bạn bè
+ Phản hồi
+ Äánh dấu
+ ThỠ%1$s trên smartphone của bạn!
Kiểm tra máy chủ
- Äịa chỉ máy chủ
+ Äịa chỉ máy chủ https://…
Tên ngÆ°á»i dùng
Máºt khẩu
Lần đầu mới đến %1$s?
Táºp tin
Kết nối
Tải lên
- Chá»n thÆ° mục tải lên:
Không tìm thấy tà i khoản
Trên thiết bị của bạn không có tà i khoản %1$s. BÆ°á»›c đầu tiên hãy thiết láºp má»™t tà i khoản.
Cà i đặt
@@ -41,7 +43,7 @@
Không có ná»™i dung được nháºn. Không có gì để tải lên.
%1$s không cho phép truy cáºp và o các ná»™i dung chia sẻ
Äang tải lên
- Không có các táºp tin trong thÆ° mục nà y ⎠táºp tin má»›i có thể được thêm và o vá»›i tùy chá»n trình Ä‘Æ¡n \"Tải lên\".
+ Không có gì ở đây .Hãy tải lên một cái gì đó !
Tap và o má»™t táºp tin để hiển thị thêm thông tin
KÃch thÆ°á»›c:
Loại:
@@ -50,6 +52,8 @@
Tải vá»
Cáºp nháºt lại táºp tin
Táºp tin đã bị đổi tên thà nh %1$s trong quá trình tải lên
+ Chia sẻ liên kết
+ Liên kết không chia sẻ
Yes
Không
Chấp nháºn
@@ -88,13 +92,12 @@
Các file trong hà ng đợi đồng bộ không thà nh công
Ná»™i dung táºp tin %1$d không thể đồng bá»™ (%2$d xung Ä‘á»™t)
Má»™t số táºp tin cục bá»™ bị quên
- Các táºp tin %1$d ở ngoà i thÆ° mục %2$s không thể được chép và o
+ Thư mục %1$s không còn tồn tại
Di chuyển tất cả
Tất cả táºp tin đã được chuyển Ä‘i
Má»™t và i táºp tin không thể chuyển Ä‘i
Cục bộ: %1$s
Từ xa: %1$s
- Không đủ chá»— trống để chép các táºp tin đã chá»n và o thÆ° mục %1$s. Bạn có muốn di chuyển chúng thay vì sao chép?
Vui lòng, nháºp mã PIN ứng dụng của bạn
Nháºp mã PIN ứng dụng App
Mã PIN sẽ được yêu cầu má»—i khi ứng dụng được báºt
@@ -114,6 +117,7 @@
Codec của media không được hỗ trợ
Không thể Ä‘á»c dữ liệu từ táºp tin media
Táºp tin media không được mã hóa đúng quy định
+ Tạm ngừng trong khi đang cố gắng chạy
Không thể phân luồng dữ liệu táºp tin media
Táºp tin media không thể được phát vá»›i trình phát media của stock
Lá»—i bảo máºt khi cố phát %1$s
@@ -128,12 +132,15 @@
Kết nối đã thiết láºp
Äang kiểm tra kết nối...
Thay đổi cấu hình máy chủ
+ Má»™t tà i khoản vá»›i cùng tên ngÆ°á»i dùng và máy chủ đã tồn tại trong thiết bị
+ Tên ngÆ°á»i dùng đã nháºp không đúng vá»›i tên ngÆ°á»i dùng của tà i khoản nà y
Không xác định được lỗi!
Không thể tìm thấy máy chủ
Phiên bản máy chủ không tìm thấy
Máy chủ đã quá dà i để đáp ứng
Thay đổi URL
SSL khởi tạo thất bại
+ không thể xác minh danh tÃnh của máy chủ SSL
Không chấp nháºn phiên bản máy chủ
Không thể thiết láºp kết nối
Kết nối an toà n đã được thiết láºp
@@ -141,12 +148,15 @@
Xác nháºn không thà nh công
Từ chối truy cáºp vì xác nháºn từ phÃa máy chủ
Trạng thái không rõ, vui lòng Ä‘iá»n lại Ä‘Æ°á»ng dẫn liên kết má»™t lần nữa
+ Hạn xác nháºn của bạn đã hết. Vui lòng, xác nháºn lại
Vui lòng Ä‘iá»n và o máºt khẩu hiện tại của bạn
+ Phiên là m việc của bạn đã kết thúc. Vui lòng kết nối lại
+ Äang kết nối đến máy chủ xác thá»±c...
+ Máy chủ không hổ trợ phương thức xác thực nà y
+ %1$s không há»— trợ nhiá»u tà i khoản
Giữ táºp tin cáºp nháºt
Sá»a tên
Xóa
- Bạn có thực sự muốn xóa %1$s ?
- Bạn có tháºt sá»± muốn xóa %1$s và ná»™i dung của nó ?
Chỉ cục bộ
Chỉ nội dung trên máy
Xóa từ máy chủ
@@ -158,10 +168,12 @@
Äổi tên không thể hoà n thà nh
Táºp tin từ xa không được kiểm tra
Ná»™i dung táºp tin đã đồng bá»™
- Thư mục không thể được tạo
+ Những kà tự không được dùng: / \\ < > : \" | ? *
ChỠmột lúc
Vấn Ä‘á» bất ngá» ; hãy thỠứng dụng khác để chá»n táºp tin
Không có táºp tin nà o được chá»n
+ Gá»i liên kết đến...
+ Äăng nháºp bằng oAuth2.
Äang kết nối đến máy chủ oAuth2...
Không thể xác minh danh tÃnh của site
Chứng chỉ nà y không đáng tin cáºy
@@ -199,17 +211,10 @@
Ghi đè lên
Không tải lên
Xem trước hình ảnh
- Không thể hiển thị hình ảnh
- %1$s không thể sao chép và o %2$s thư mục cục bộ
- Tải lên nhanh bị lỗi\"
- Tải lên nhanh bị lỗi
- Tóm tắt tất cả các tải lên nhanh bị lỗi
- chá»n tất cả
- thá» lại vá»›i tất cả các đối tượng được chá»n
- xóa tất cả khá»i các đối tượng được chá»n trong hà ng đợi chá» tải lên
- thỠlại việc tải lên hình ảnh:
- Tải thêm nhiá»u hình ảnh
- không thực hiện thao tác gì nêu bạn không có kết nối mạng dà nh cho tải lên nhanh
- Thông điệp lỗi:
- Vui lòng kiểm tra cấu hình máy chủ của bạn, có thể hạn ngạch dữ liệu đã quá hạn.
+ Một lỗi đã xảy ra khi thỠchia sẻ file hoặc thư mục nà y
+ Một lỗi đã xảy ra khi thỠgỡ chia sẻ file hoặc thư mục nà y
+ Gởi
+
+ Tà i khoản
+ Chá»n
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 67a69e1207..79255f8dee 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -1,36 +1,47 @@
+ %1$s 安å“应用
版本:%1$s
刷新å¸æˆ·
上ä¼
æ¥è‡ªå…¶å®ƒapp的内容
文件
打开
- 创建目录
+ å¢žåŠ æ–‡ä»¶å¤¹
设置
详细信æ¯
+ å‘é€
常规
更多
è´¦å·
管ç†è´¦å·
App PIN
ä¿æŠ¤æ‚¨çš„App客户端
- å¼€å¯å³æ—¶ä¸Šä¼
- å³æ—¶ä¸Šä¼ 相机æ‹æ‘„的照片
+ å³æ—¶å›¾ç‰‡ä¸Šä¼
+ å³æ—¶ä¸Šä¼ 相机æ‹æ‘„的图片
+ ç«‹å³ä¸Šä¼ 视频
+ å³æ—¶ä¸Šä¼ 由相机æ‹æ‘„的视频
å¼€å¯æ—¥å¿—
+ 这过去是日志问题
日志历å²
+ 这显示已ç»ä¿å˜çš„日志
åˆ é™¤åŽ†å²
帮助
+ 推è给朋å‹
å馈
版本说明
+ 在您的智能手机上试用一下 %1$sï¼
+ â€œæˆ‘é‚€è¯·ä½ ä½¿ç”¨åœ¨ä½ çš„æ™ºèƒ½æ‰‹æœºä¸Šä½¿ç”¨ %1$s,在这下载:%2$sâ€
+
检查æœåŠ¡å™¨
- æœåŠ¡å™¨åœ°å€
+ æœåŠ¡å™¨åœ°å€ https://...
用户å
密ç
+ 新增到 %1$s?
文件
连接
上ä¼
- é€‰æ‹©ä¸Šä¼ ç›®å½•ï¼š
+ é€‰æ‹©ä¸Šä¼ æ–‡ä»¶å¤¹ï¼š
未找到账å·
设备上未找到账å·ï¼Œè¯·å…ˆåˆ›å»ºè´¦å·ã€‚
设置
@@ -39,14 +50,19 @@
æ²¡æœ‰æŽ¥æ”¶åˆ°å†…å®¹ï¼Œæ— å¯ä¸Šä¼ 。
%1$s未被å…许访问共享内容。
上ä¼
- 文件夹为空\nå¯ä»¥ä½¿ç”¨ä¸Šä¼ 按钮æ¥å¢žåŠ 文件
+ è¿™é‡Œè¿˜ä»€ä¹ˆéƒ½æ²¡æœ‰ã€‚ä¸Šä¼ äº›ä¸œè¥¿å§ï¼
+ 载入ä¸....
+ 在该文件夹ä¸ä¸å˜åœ¨æ–‡ä»¶ã€‚
点击一个文件æ¥æ˜¾ç¤ºé¢å¤–çš„ä¿¡æ¯ã€‚
大å°ï¼š
类型:
创建于:
已修改:
下载
+ 刷新文件
ä¸Šä¼ è¿‡ç¨‹ä¸æ–‡ä»¶è¢«æ›´å为了 %1$s
+ 分享链接
+ å–消共享链接
是
å¦
OK
@@ -62,13 +78,14 @@
åˆ é™¤è´¦å·
创建账å·
ä¸Šä¼ è‡ª...
- 文件夹å称
+ 目录å称
ä¸Šä¼ ...
%1$d%% ä¸Šä¼ %2$s
ä¸Šä¼ æˆåŠŸ
%1$s æˆåŠŸä¸Šä¼
ä¸Šä¼ å¤±è´¥
1$ä¸Šä¼ æœªèƒ½å®Œæˆ
+ ä¸Šä¼ å¤±è´¥ï¼Œæ‚¨éœ€è¦é‡æ–°ç™»å½•
下载ä¸â€¦â€¦
%1$d%% ä¸‹è½½ä¸ %2$s
下载æˆåŠŸ
@@ -76,8 +93,10 @@
下载失败
下载1$s 未能完æˆ
未下载完毕
+ 下载失败,您需è¦é‡æ–°ç™»å½•
选择账户
åŒæ¥å¤±è´¥
+ åŒæ¥å¤±è´¥ï¼Œæ‚¨éœ€è¦é‡æ–°ç™»å½•
%1$såŒæ¥æœªå®Œæˆã€‚
密ç 错误%1$s
å‘现冲çª
@@ -85,14 +104,15 @@
文件åŒæ¥å¤±è´¥
æ— æ³•åŒæ¥ %1$d 文件内容(与 %2$d 冲çª)
æŸäº›æœ¬åœ°æ–‡ä»¶å·²è¢«é—忘
- %2$s目录ä¸çš„%1$d个文件ä¸èƒ½è¢«å¤åˆ¶åˆ°
- \"从 1.3.16 版起,从æ¤è®¾å¤‡ä¸Šä¼ 的文件将被å¤åˆ¶åˆ°æœ¬åœ°çš„ %1$s 文件夹æ¥é˜²æ¢å½“æŸä¸ªå•ä¸€æ–‡ä»¶åœ¨å¤šä¸ªè´¦æˆ·é—´åŒæ¥é€ æˆçš„æ•°æ®æŸå¤±ã€‚由于æ¤é¡¹å˜åŒ–,æ¤åº”用之å‰çš„ç‰ˆæœ¬ä¸Šä¼ çš„å…¨éƒ¨æ–‡ä»¶éƒ½å·²è¢«å¤åˆ¶åˆ°äº† %2$s 文件夹。然而,账户åŒæ¥æœŸé—´æœ‰ä¸€ä¸ªé”™è¯¯é˜»æ¢äº†æ¤æ“作的完æˆã€‚您或许å¯ä»¥ä¿æŒæ–‡ä»¶ä¸åŠ¨ï¼Œå¹¶ç§»é™¤æŒ‡å‘ %3$s 的链接,或将文件移动到 %1$s 文件夹ä¸å¹¶å°†ä¿æŒåˆ° %4$s 的链接。下é¢åˆ—出的是本地文件,以åŠå®ƒä»¬è¢«é“¾æŽ¥åˆ°çš„ %5$s ä¸çš„远程文件。
+ %2$s 目录ä¸çš„ %1$d 个文件ä¸èƒ½è¢«å¤åˆ¶åˆ°
+ 从 1.3.16 版起,从æ¤è®¾å¤‡ä¸Šä¼ 的文件将被å¤åˆ¶åˆ°æœ¬åœ°çš„ %1$s 文件夹,以防æ¢æŸä¸ªå•ä¸€æ–‡ä»¶åœ¨å¤šä¸ªè´¦æˆ·é—´åŒæ¥è€Œé€ æˆçš„æ•°æ®æŸå¤±ã€‚\n\n 由于æ¤é¡¹å˜åŒ–,æ¤åº”用之å‰çš„ç‰ˆæœ¬ä¸Šä¼ çš„å…¨éƒ¨æ–‡ä»¶éƒ½å·²è¢«å¤åˆ¶åˆ°äº† %2$s 文件夹。然而,账户åŒæ¥æœŸé—´æœ‰ä¸€ä¸ªé”™è¯¯é˜»æ¢äº†æ¤æ“作的完æˆã€‚您å¯èƒ½æƒ³ä¿æŒæ–‡ä»¶ä¸åŠ¨ï¼Œå¹¶ç§»é™¤æŒ‡å‘ %3$s 的链接,或将文件移动到 %1$s 文件夹ä¸å¹¶ä¿æŒå…¶åˆ° %4$s 的链接。下é¢åˆ—出的是本地文件,以åŠå®ƒä»¬è¢«é“¾æŽ¥åˆ°çš„ %5$s ä¸çš„远程文件。
+ 文件夹%1$s ä¸å˜åœ¨
移动所有
所有文件已被移动
æŸäº›æ–‡ä»¶æ— 法被移动
本地: %1$s
远程:%1$s
- 没有足够的空间æ¥å°†é€‰å®šçš„文件å¤åˆ¶åˆ°%1$s文件夹. 是å¦ä½¿ç”¨ä½¿ç”¨ç§»åŠ¨æ¥ä»£æ›¿å¤åˆ¶?
+ 没有足够的空间以å¤åˆ¶é€‰å®šçš„文件到 %1$s 文件夹,您想移动文件到æ¤æ–‡ä»¶å¤¹å—?
请输入您的App PINç
输入 App PINç
æ¯æ¬¡åº”用å¯åŠ¨æ—¶éƒ½ä¼šè¯·æ±‚PINç
@@ -112,6 +132,7 @@
ä¸æ”¯æŒçš„ç¼–ç æ ¼å¼
文件ä¸å¯è¯»
文件编ç 错误
+ æ’放超时
文件ä¸æ”¯æŒæµæ’
当å‰åª’体æ’放器ä¸æ”¯æŒã€‚
å°è¯•æ’放%1$sæ—¶ä¿æŠ¤é”™è¯¯
@@ -120,27 +141,42 @@
åŽé€€æŒ‰é’®
æ’放暂åœæŒ‰é’®
快进按钮
+ æ£åœ¨è®¤è¯...
å°è¯•ç™»å½•
没有网络连接
å®‰å…¨é“¾æŽ¥æ— æ•ˆã€‚
连接已建立。
测试连接……
æœåŠ¡å™¨é…ç½®ä¸æ£ç¡®ã€‚
+ æ¤è®¾å¤‡ä¸å·²ç»å˜åœ¨åŒååŒæœåŠ¡å™¨çš„å¸å·
+ 输入用户与æ¤å¸æˆ·çš„用户ä¸ç¬¦
å‘生未知错误ï¼
æ— æ³•æ‰¾åˆ°æœåŠ¡å™¨
未å‘现æœåŠ¡å™¨å®žä¾‹
看起æ¥æœåŠ¡å™¨ä¸å¤ªç»™åŠ›
网å€ä¸æ£ç¡®
SSLåˆå§‹åŒ–失败
+ æ— æ³•éªŒè¯ SSL æœåŠ¡å™¨çš„身份
ä¸å¯è¾¨è¯†çš„æœåŠ¡å™¨æœåŠ¡å™¨ç‰ˆæœ¬
æ— æ³•å»ºç«‹è¿žæŽ¥
åŠ å¯†è¿žæŽ¥å·²å»ºç«‹
用户å或密ç 错误ï¼
+ 认è¯ä¸æˆåŠŸ
+ 访问被认è¯æœåŠ¡å™¨æ‹’ç»
+ æ„外状æ€ï¼›è¯·å†æ¬¡è¾“å…¥æœåŠ¡å™¨çš„地å€
+ ä½ çš„æŽˆæƒå·²ç»è¿‡æœŸã€‚请é‡æ–°æŽˆæƒã€‚
请输入当å‰å¯†ç :
+ 您的会è¯è¶…时了,请é‡æ–°è¿žæŽ¥
+ æ£åœ¨è¿žæŽ¥åˆ°è®¤è¯æœåŠ¡å™¨....
+ æœåŠ¡å™¨ä¸æ”¯æŒè¿™ç§éªŒè¯æ–¹å¼
+ %1$sä¸æ”¯æŒå¤šä¸ªè´¦æˆ·
+ 您的æœåŠ¡å™¨æ²¡æœ‰è¿”回一个æ£ç¡®çš„用户 id,请è”系管ç†å‘˜
+
+ æ— æ³•é€šè¿‡æ¤æœåŠ¡å™¨è®¤è¯
ä¿è¯æ–‡ä»¶æ›´æ–°
é‡å‘½å
åˆ é™¤
- 是å¦è¦åˆ 除%1$s ?
+ ä½ ç¡®å®šè¦åˆ 除 %1$s å—?
您确定è¦åˆ 除 %1$s åŠå…¶å†…容å—?
仅本地
仅本地内容
@@ -153,10 +189,15 @@
é‡å‘½å未完æˆ
æ— æ³•æ ¸å®žè¿œç¨‹æ–‡ä»¶
文件内容已åŒæ¥
- æ— æ³•åˆ›å»ºæ–‡ä»¶å¤¹
+ æ–‡ä»¶å¤¹æ— æ³•åˆ›å»º
+ ç¦ç”¨å—符: / \\ < > : \" | ? *
+ 文件åä¸èƒ½ä¸ºç©º
请ç¨å€™
未知问题;请试试用其他程åºé€‰æ‹©æ¤æ–‡ä»¶
未选择文件。
+ å‘é€é“¾æŽ¥ç»™ …
+ 使用oAuth2登陆
+ 连接oAuth2 æœåŠ¡å™¨...
ç«™ç‚¹èº«ä»½æ— æ³•éªŒè¯
ä¸å—信任的æœåŠ¡å™¨è¯ä¹¦
æœåŠ¡å™¨è¯ä¹¦è¿‡æœŸ
@@ -179,6 +220,8 @@
到:
ç¾å:
算法:
+ æ— æ³•æ˜¾ç¤ºè¯ä¹¦ã€‚
+ - 没有关于该错误的有效信æ¯
å ä½ç¬¦
点ä½ç¬¦.txt
PNG图åƒæ ¼å¼
@@ -186,6 +229,7 @@
2012/05/18 下åˆ12:23
12:23:45
仅通过WIFIä¸Šä¼ å›¾ç‰‡ã€‚
+ 仅在 WIFI ä¸‹ä¸Šä¼ è§†é¢‘
/InstantUpload
ä¸Šä¼ å†²çª
远程文件 %s 未与本地文件åŒæ¥ã€‚继ç»å°†æ›¿æ¢æœåŠ¡å™¨ä¸Šçš„文件内容。
@@ -194,16 +238,44 @@
ä¸ä¸Šä¼
图片预览
ä¸èƒ½æ˜¾ç¤ºå›¾ç‰‡
- %1$sæ— æ³•è¢«å¤åˆ¶åˆ°%2$s本地目录
- é™æ—¶ä¸Šä¼ 失败
- é™æ—¶ä¸Šä¼ 失败
- é™æ—¶ä¸Šä¼ 失败汇总
- 全选
- é‡è¯•å…¨é€‰
- ä»Žä¸Šä¼ åˆ—è¡¨åˆ é™¤æ‰€æœ‰é€‰å®šé¡¹
- é‡è¯•ä¸Šä¼ 图片
- 载入更多图片
- ä¸åœ¨çº¿æ—¶ä¸å¼€å¯å³æ—¶ä¸Šä¼
- 失败消æ¯
- 请检查æœåŠ¡å™¨è®¾ç½®ã€‚å¯èƒ½èµ°å‡ºé…é¢ã€‚
+ æ— æ³•å¤åˆ¶ %1$s 到本地目录 %2$s
+ 抱æ‰ï¼Œå…±äº«åŠŸèƒ½æœªå¯ç”¨ã€‚请è”系管ç†å‘˜ã€‚
+ æ— æ³•å…±äº«ã€‚è¯·æ£€æŸ¥æ–‡ä»¶æ˜¯å¦å˜åœ¨
+ 共享文件或目录出错
+ æ— æ³•å–消共享。请检查文件是å¦å˜åœ¨
+ 解除文件或目录共享时出错
+ å‘é€
+ å¤åˆ¶é“¾æŽ¥
+ å¤åˆ¶åˆ°å‰ªè´´æ¿
+ 严é‡é”™è¯¯ï¼šæ— 法执行æ“作
+ 连接到æœåŠ¡å™¨æ—¶å‘生了一个错误。
+ ç‰å¾…æœåŠ¡å™¨å“应时å‘生了一个错误,æ¤æ“ä½œæ— æ³•å®Œæˆ
+ ç‰å¾…æœåŠ¡å™¨å“应时å‘生了一个错误,æ¤æ“ä½œæ— æ³•å®Œæˆ
+ æœåŠ¡å™¨ä¸å¯ç”¨ï¼Œæ¤æ“ä½œæ— æ³•å®Œæˆ
+
+ ä½ æ²¡æœ‰è®¸å¯%s
+ é‡å‘½å该文件
+ åˆ é™¤è¯¥æ–‡ä»¶
+ 分享该文件
+ å–消共享该文件
+ 创建文件
+ ä¸Šä¼ æ¤æ–‡ä»¶å¤¹
+ 该文件在æœåŠ¡å™¨ä¸Šä¸å¯ç”¨
+ è´¦å·
+ æ·»åŠ è´¦å·
+ 日志
+ å‘é€åŽ†å²
+ ownCloud安å“客户端日志
+ åŠ è½½æ•°æ®ä¸...
+ 需è¦è®¤è¯
+ 错误密ç
+ 移动
+ è¿™é‡Œè¿˜ä»€ä¹ˆéƒ½æ²¡æœ‰ã€‚ä¸Šä¼ äº›ä¸œè¥¿å§ï¼
+ 选择(&C)...
+ æ— æ³•ç§»åŠ¨ã€‚è¯·æ£€æŸ¥æ–‡ä»¶æ˜¯å¦å˜åœ¨
+ bä¸èƒ½å¤ŸæŠŠä¸€ä¸ªç›®å½•ç§»åŠ¨åˆ°å®ƒçš„下级
+ 该文件已ç»å˜åœ¨åœ¨ç›®æ ‡æ–‡ä»¶å¤¹
+ å°è¯•ç§»åŠ¨è¯¥æ–‡ä»¶æˆ–文件夹时å‘生错误
+ 移动该文件
+ 安全
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index c1195647c5..bd5f2e13ea 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -1,31 +1,71 @@
- 上傳
+ %1$s Android App
+ 版本 %1$s
+ 上戴
文件
- 建立目錄
+ 新資料夾
è¨å®š
+ 傳é€
一般
+ 更多
帳號
+ 刪除記錄
幫助
+ 推薦給朋å‹
+ å饋
用戶å稱
密碼
文件
連線
- 上傳
+ 上戴
找ä¸åˆ°å¸³æˆ¶
è¨å®š
退出
- æ£åœ¨ä¸Šå‚³
- 大å°
- 類別
- 建立於:
- 修改於:
+ æ£åœ¨ä¸Šæˆ´
+ 按一下文件顯示更多資料。
+ 大å°ï¼š
+ 類別:
+ 建立時間:
+ 修改時間:
下載
- Yes
- No
+ 分享連çµ
+ å–消分享連çµ
+ 是
+ å¦
確定
+ å–消下戴
+ å–消上戴
å–消
+ 儲å˜ä¸¦é›¢é–‹
錯誤
- 目錄å稱
- é¸æ“‡å¸³æˆ¶
+ æˆ´å…¥ä¸ â€¦
+ ä¸æ˜ŽéŒ¯èª¤
+ 關於
+ 更改密碼
+ 刪除帳號
+ 建立帳號
+ 上戴由 …
+ 資料夾å稱
+ ä¸Šæˆ´ä¸ â€¦
+ 上載æˆåŠŸ
+ 上載失敗
+ 下載ä¸
+ 下載æˆåŠŸ
+ 下載失敗
+ é¸æ“‡å¸³è™Ÿ
+ 移動所有
+ 無網絡連線
+ é‡æ–°å‘½å
+ 刪除
+ éš±è—
+ 國家:
+ 389 KB
+ 2012/05/18 12:23 PM
+ 12:23:45
+ 傳é€
+ 複製連çµ
+
+ 帳號
+ 密碼錯誤
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 4f3299c90c..91041380b7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -7,27 +7,33 @@
其他應用程åºçš„內容
檔案
é–‹å•Ÿæ–¹å¼
- 建立目錄
+ 新資料夾
è¨å®š
詳細資料
+ 寄出
一般
更多
帳號
管ç†å¸³è™Ÿ
App 密碼
ä¿è·æ‚¨çš„ App 用戶端
- 啟用å³æ™‚上傳
- å³æ™‚上傳照相機æ‹æ”的圖片
+ å³æ™‚圖片上傳
+ å³æ™‚上傳相機照片
+ å³æ™‚å½±åƒä¸Šå‚³
+ 將照相機所æ‹æ”完æˆçš„å½±åƒå³æ™‚上傳
啟用記錄
這個用來記錄執行的動作以找出å•é¡Œé»ž
æ·å²è¨˜éŒ„
顯示之å‰çš„記錄檔
刪除æ·å²è¨˜éŒ„
說明
+ 推薦給朋å‹
å饋
法律è²æ˜Ž
+ 在您的手機ä¸è©¦ç”¨%1$s!
+ 我想邀請您在您的手機上使用 %1$s ! å¯ä»¥ç”±é€™å…’下載: %2$s
檢查伺æœå™¨
- 伺æœå™¨ä½å€
+ 伺æœå™¨ä½å€ https://...
使用者å稱
密碼
新增到 %1$s?
@@ -43,7 +49,9 @@
沒接到任何內容。沒有什麼å¯ä¸Šè¼‰ã€‚
%1$s 並沒有被å…許å˜å–分享的內容
上傳ä¸
- 這個目錄目å‰æ˜¯ç©ºçš„
+ 這裡還沒有æ±è¥¿ï¼Œä¸Šå‚³ä¸€äº›å§ï¼
+ 載入ä¸â€¦
+ 這個目錄ä¸æ²’有任何檔案.
在檔案上輕觸來顯示更多資訊。
容é‡:
é¡žåž‹:
@@ -52,6 +60,8 @@
下載
更新檔案列表
檔案å稱在上傳時已被更改為 %1$s
+ 分享連çµ
+ å–消共享連çµ
是
å¦
好
@@ -67,13 +77,14 @@
刪除帳號
建立帳號
更新自 ...
- 目錄å稱
+ 資料夾å稱
æ›´æ–°ä¸ ...
%1$d%% ä¸Šå‚³ä¸ %2$s
æ›´æ–°æˆåŠŸ
%1$s å·²æˆåŠŸåœ°ä¸Šå‚³
上傳失敗
上傳 %1$s 未完æˆ
+ 上傳失敗, 您需è¦é‡æ–°ç™»å…¥
ä¸‹è¼‰ä¸ ...
%1$d%% ä¸‹è¼‰ä¸ %2$s
下載æˆåŠŸ
@@ -81,8 +92,10 @@
下載失敗
下載 %1$s 未完æˆ
尚未下載
+ 下傳失敗, 您需è¦é‡æ–°ç™»å…¥
é¸æ“‡å¸³è™Ÿ
åŒæ¥å¤±æ•—
+ åŒæ¥ä½œæ¥å¤±æ•—, 您需è¦é‡æ–°ç™»å…¥
åŒæ¥ %1$s 未完æˆ
無效的密碼 %1$s
出ç¾è¡çª
@@ -90,8 +103,9 @@
åŒæ¥æª”案失敗
%1$d 未被åŒæ¥ (%2$d è¡çª)
有些本地端的檔案已éºå¤±
- %1$d 檔案於 %2$s 目錄未被複製
- 在 1.3.16 之å‰, 檔案上傳到本地的 %1$s 目錄以é¿å…在多帳戶內åŒæ¥é€ æˆéºå¤±.\n\n由於這個改變, 所以在之å‰ç‰ˆæœ¬ä¸Šå‚³çš„檔案被複製到 %2$s 目錄ä¸. 為了é¿å…åŒæ¥ç™¼ç”Ÿå•é¡Œ. ä½ å¯ä»¥ä¿ç•™é‚£äº›æª”æ¡ˆä¸¦åˆªé™¤é€£çµ %3$s, 或æ¬ç§»æª”案到 %1$s 目錄並å–得連çµåˆ° %4$s.\n\n下é¢åˆ—表是本地檔案, 與被連çµé 端檔案 %5$s.
+ %1$d æª”æ¡ˆè¶…éŽ %2$s 資料夾å¯èƒ½ä¸èƒ½è¤‡è£½é€²åŽ»
+ 在 1.3.16 版之å‰, 檔案上傳時會先複製到本地的 %1$s 目錄以é¿å…在多帳戶內åŒæ¥é€ æˆéºå¤±.\n\n由於這個改變, 所以在之å‰ç‰ˆæœ¬ä¸Šå‚³çš„檔案被複製到 %2$s 目錄ä¸. 為了é¿å…åŒæ¥ç™¼ç”Ÿå•é¡Œ. ä½ å¯ä»¥ä¿ç•™é‚£äº›æª”æ¡ˆä¸¦åˆªé™¤é€£çµ %3$s, 或æ¬ç§»æª”案到 %1$s 目錄並å–得連çµåˆ° %4$s.\n\n下é¢åˆ—表是本地檔案, 與被連çµé 端檔案 %5$s.
+ 資料夾 %1$s ä¸å˜åœ¨
移動全部
所有文件已被移動
部份文件無法被移動
@@ -117,6 +131,7 @@
未支æ´çš„媒體編碼
無法讀å–媒體檔案
媒體檔案未被æ£ç¢ºçš„編碼
+ 嘗試æ’放時逾時
媒體檔案無法在網路æ’放
媒體檔案無法在æ£å¸¸çš„æ’放軟體æ’放
在æ’放 %1$s 時發生安全性的錯誤
@@ -125,18 +140,22 @@
é‡æ–°æ’放按éµ
æ’放或暫åœæŒ‰éµ
快轉按éµ
+ 登入ä¸...
嘗試登入…
沒有網際網路連線
安全連線ä¸å¯ç”¨ã€‚
連線已建立
測試連線ä¸â€¦
伺æœå™¨è¨å®šæœ‰å•é¡Œ
+ 已經有相åŒä½¿ç”¨è€…與伺æœå™¨çš„帳號å˜åœ¨æ–¼é€™å€‹è£ç½®
+ 輸入的使用者與這個帳戶的使用者ä¸ä¸€è‡´
發生未知的錯誤ï¼
找ä¸åˆ°ä¼ºæœå™¨
找ä¸åˆ°ä¼ºæœå™¨
伺æœå™¨å›žæ‡‰é€¾æ™‚
URL ä¸æ£ç¢º
SSL åˆå§‹åŒ–失敗
+ ç„¡æ³•é©—è‰ SSL 伺æœå™¨èº«ä»½
無法辨è˜çš„伺æœå™¨ç‰ˆæœ¬
無法建立連線
安全連線已建立
@@ -144,7 +163,15 @@
未æˆåŠŸç™»å…¥
被授登伺æœå™¨æ‹’絕登入
未知的狀態; è«‹å†è¼¸å…¥ä¸€æ¬¡ä¼ºæœå™¨çš„å稱
+ ä½ çš„ç™»å…¥æŽˆæ¬Šå·²éŽæœŸ. è«‹å†æ¬¡ç™»å…¥
請輸入目錄的密碼
+ 您的連接已逾期. è«‹é‡æ–°é€£ç·š.
+ 連線到èªè‰ä¼ºæœå™¨...
+ 伺æœå™¨ä¸æ”¯æ´é€™ç¨®èªè‰æ–¹å¼
+ %1$s ä¸æ”¯æ´è¤‡æ•¸è³¬æˆ¶
+ ä½ çš„ä¼ºæœå™¨ä¸¦æ²’有傳回æ£ç¢ºçš„使用者 ID, è«‹è¯çµ¡ä¼ºæœå™¨çš„管ç†å“¡
+
+ 無法在這個伺æœå™¨ä¸Šå–å¾—èªè‰
讓檔案ä¿æŒæœ€æ–°çš„
é‡æ–°å‘½å
移除
@@ -161,10 +188,14 @@
é‡æ–°å‘½å失敗
無法檢查é 端的檔案
檔案與åŒæ¥
- 資料夾無法被建立
+ 資料夾無法建立
+ ç¦æ¢ä½¿ç”¨å—符: / \\ < > : \" | ? *
+ 檔åä¸èƒ½ç‚ºç©ºçš„
è«‹ç¨å¾Œ
未知的å•é¡Œ; è«‹é¸æ“‡å…¶ä»–程å¼é–‹å•Ÿæª”案
沒有挑é¸æª”案
+ 傳é€é€£çµè‡³ ...
+ 以 oAuth2 æ–¹å¼ç™»å…¥
連線到 oAuth2 伺æœå™¨â€¦
這個網站的憑è‰ç„¡æ³•è¢«é©—è‰
- 這個伺æœå™¨ä½¿ç”¨æœªè¢«ä¿¡ä»»çš„憑è‰
@@ -188,6 +219,8 @@
至:
ç°½å:
演算法:
+ 這個憑è‰ç„¡æ³•è¢«é¡¯ç¤º
+ - 沒有關於這個錯誤的說明
這是佔ä½çš„資訊
placeholder.txt
PNG 圖檔
@@ -195,6 +228,7 @@
2012/05/18 12:23 PM
12:23:45
åªä½¿ç”¨ WiFi 上傳
+ åªé€éŽç„¡ç·šç¶²è·¯ä¾†åŸ·è¡Œå³æ™‚å½±åƒä¸Šå‚³çš„功能
/InstantUpload
æ›´æ–°è¡çª
é 端檔案 %s 未åŒæ¥åˆ°æœ¬åœ°. 繼續將å–代伺æœå™¨ä¸Šçš„文件.
@@ -204,15 +238,47 @@
圖片é 覽
無法顯示圖片
%1$s 無法被複製到本地目錄 %2$s
- å³æ™‚上傳失敗
- å³æ™‚上傳失敗
- 所有å³æ™‚上傳失敗的記錄
- 全部é¸å–
- é‡æ–°ä¸Šå‚³é¸å–的檔案
- 刪除所有被é¸å–的檔案
- é‡æ–°ä¸Šå‚³é€™å€‹æª”案:
- 載入更多的檔案
- 未連線, 所以無法使用上傳功能
- 失敗訊æ¯:
- è«‹æª¢æŸ¥ä½ çš„ä¼ºæœå™¨è¨å®š, å¯èƒ½ä½ çš„é¡åº¦å·²è¶…éŽ.
+ 上傳目錄
+ 很抱æ‰, 您的伺æœå™¨ä¸¦æœªé–‹å•Ÿåˆ†äº«çš„功能. è«‹è¯çµ¡æ‚¨çš„
+ 伺æœå™¨ç®¡ç†å“¡.
+ 無法分享這個檔案或目錄. 請檢查它們是å¦å˜åœ¨
+ 在分享檔案或目錄時發生了錯誤
+ 無法å–消分享這個檔案或目錄. 請檢查它們是å¦å˜åœ¨
+ 在å–消分享檔案或目錄時發生了錯誤
+ 寄出
+ 複製連çµ
+ 複製至剪貼簿ä¸
+ åš´é‡éŒ¯èª¤: 無法執行é‹ç®—
+ 在與伺æœå™¨é€£ç·šæ™‚發生了錯誤.
+ 在ç‰å¾…伺æœå™¨å›žæ‡‰æ™‚發生了錯誤, 這個æ“作將無法被完æˆ
+ 在ç‰å¾…伺æœå™¨å›žæ‡‰æ™‚發生了錯誤, 這個æ“作將無法被完æˆ
+ 這個æ“作無法完æˆ, 無法使用伺æœå™¨
+
+ æ‚¨æ²’æœ‰æ¬Šé™ %s
+ é‡æ–°å‘½å檔案
+ 刪除檔案
+ 分享檔案
+ å–消分享檔案
+ 建立檔案
+ 上傳這個目錄
+ 這個檔案已經ä¸å˜åœ¨æ–¼ä¼ºæœå™¨ä¸
+ 帳號
+ 新增帳號
+ 安全連線被轉å‘到一個éžå®‰å…¨çš„連線
+ 紀錄
+ 傳é€æ·å²è¨˜éŒ„
+ ownCloud Android 應用程å¼è¨˜éŒ„
+ 資料載入ä¸...
+ å¿…é ˆé©—è‰
+ 密碼錯誤
+ 移動
+ 找ä¸åˆ°ä»»ä½•æª”案. ä½ å¯ä»¥æ–°å¢žä¸€å€‹ç›®éŒ„!
+ é¸æ“‡
+ 無法æ¬ç§». 請檢查該檔案是å¦å˜åœ¨
+ 把一個目錄æ¬ç§»åˆ°å…¶åº•ä¸‹çš„å目錄是ä¸å¯èƒ½çš„
+ 這個檔案已經å˜åœ¨æ–¼ç›®çš„目錄ä¸
+ 在移動檔案或目錄時發生了錯誤
+ 移動這個檔案
+ å³æ™‚上傳
+ 安全性
diff --git a/res/values/colors.xml b/res/values/colors.xml
index ce9b2d1f8c..2b1fec9152 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -21,5 +21,6 @@
#DDDDDD
#00ddff
+ #989898
\ No newline at end of file
diff --git a/res/values/setup.xml b/res/values/setup.xml
index 226b6182f0..6c1a67a9f0 100644
--- a/res/values/setup.xml
+++ b/res/values/setup.xml
@@ -8,17 +8,23 @@
ownCloud
owncloud
Owncloud_
+ ownCloud
true
true
"https://owncloud.com/mobile/new"
+
off
off
+
+ on
+
+
#FFFFFF
#FFFFFF
@@ -33,16 +39,19 @@
true
- false
+ true
false
- false
- false
- https://owncloud.com/mobile/help
+ true
+ true
+ http://owncloud.com/mobile/help
"mailto:"
"mailto:apps@owncloud.com"
"https://play.google.com/store/apps/details?id=com.owncloud.android"
+
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 30f6b4f5ff..dc7ec2a4d1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -8,18 +8,28 @@
Content from other apps
Files
Open with
- Create directory
+ New folder
Settings
Details
-
+ Send
+ Sort
+ Sort by
+
+ - A-Z
+ - Newest - Oldest
+
+
General
More
Accounts
Manage Accounts
App PIN
Protect your client
- Enable instant uploads
- Instantly upload photos taken by camera
+ Instant picture uploads
+ Instantly upload pictures taken by camera
+ Instant video uploads
+ Instantly upload videos recorded by camera
Enable Logging
This is used to log problems
Logging History
@@ -31,17 +41,17 @@
Imprint
"Try %1$s on your smartphone!"
- "I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s"
+ "I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s"
Check Server
- Server address
+ Server address https://…
Username
Password
New to %1$s?
Files
Connect
Upload
- Choose upload directory:
+ Choose upload folder:
No account found
There are no %1$s accounts on your device. Please setup an account first.
Setup
@@ -50,7 +60,9 @@
No content was received. Nothing to upload.
%1$s is not allowed to access the shared content
Uploading
- There are no files in this folder.\nNew files can be added with the \"Upload\" menu option.
+ Nothing in here. Upload something!
+ Loading...
+ There are no files in this folder.
folder
folders
file
@@ -63,6 +75,8 @@
Download
Refresh file
File was renamed to %1$s during upload
+ Share link
+ Unshare link
Yes
No
OK
@@ -78,13 +92,14 @@
Delete account
Create account
Upload from …
- Directory name
+ Folder name
Uploading …
%1$d%% Uploading %2$s
Upload succeeded
%1$s was successfully uploaded
Upload failed
Upload of %1$s could not be completed
+ Upload failed, you need to relogin
Downloading …
%1$d%% Downloading %2$s
Download succeeded
@@ -92,8 +107,10 @@
Download failed
Download of %1$s could not be completed
Not downloaded yet
+ Download failed, you need to relogin
Choose account
Synchronization failed
+ Synchronization failed, you need to relogin
Synchronization of %1$s could not be completed
Invalid password for %1$s
Conflicts found
@@ -101,16 +118,17 @@
Kept-in-sync files failed
Contents of %1$d files could not be sync\'ed (%2$d conflicts)
Some local files were forgotten
- %1$d files out of the %2$s directory could not be copied into
- As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s directory and retain the link to %4$s.\n\nListed below are the local file(s), and the the remote file(s) in %5$s they were linked to.
+ %1$d files out of the %2$s folder could not be copied into
+ As of version 1.3.16, files uploaded from this device are copied into the local %1$s folder to prevent data loss when a single file is synced with multiple accounts.\n\nDue to this change, all files uploaded in previous versions of this app were copied into the %2$s folder. However, an error prevented the completion of this operation during account synchronization. You may either leave the file(s) as is and remove the link to %3$s, or move the file(s) into the %1$s folder and retain the link to %4$s.\n\nListed below are the local file(s), and the remote file(s) in %5$s they were linked to.
Folder %1$s does not exist anymore
"Move all"
"All files were moved"
"Some files could not be moved"
"Local: %1$s"
"Remote: %1$s"
- There is not space enough to copy the selected files into the %1$s folder. Would like to move them into instead?
+ There is not space enough to copy the selected files into the %1$s folder. Would you like to move them instead?
Please, insert your App PIN
+
Enter your App PIN
The PIN will be requested every time the app is started
Please, reenter your App PIN
@@ -126,54 +144,58 @@
"%1$s playback finished"
No media file found
No account provided
- File not in a valid account
- Unsupported media codec
- Media file could not be read
- Media file not correctly encoded
- Timed out while trying to play
- Media file cannot be streamed
- Media file cannot be played with the stock media player
- Security error trying to play %1$s
+ File not in a valid account
+ Unsupported media codec
+ Media file could not be read
+ Media file not correctly encoded
+ Timed out while trying to play
+ Media file cannot be streamed
+ Media file cannot be played with the stock media player
+ Security error trying to play %1$s
Input error trying to play %1$s
Unexpected error trying to play %1$s
Rewind button
Play or pause button
Fast forward button
- Trying to login…
- No network connection
- Secure connection unavailable.
- Connection established
- Testing connection…
- Malformed server configuration
- An account for the same user and server already exists in the device
- The entered user does not match the user of this account
- Unknown error occurred!
- Couldn\'t find host
- Server instance not found
- The server took too long to respond
- Malformed URL
- SSL initialization failed
- Couldn\'t verify SSL server\'s identity
- Unrecognized server version
- Couldn\'t establish connection
- Secure connection established
- Wrong username or password
+ Getting authorization…
+ Trying to login…
+ No network connection
+ Secure connection unavailable.
+ Connection established
+ Testing connection…
+ Malformed server configuration
+ An account for the same user and server already exists in the device
+ The entered user does not match the user of this account
+ Unknown error occurred!
+ Couldn\'t find host
+ Server instance not found
+ The server took too long to respond
+ Malformed URL
+ SSL initialization failed
+ Couldn\'t verify SSL server\'s identity
+ Unrecognized server version
+ Couldn\'t establish connection
+ Secure connection established
+ Wrong username or password
Unsuccessful authorization
Access denied by authorization server
- Unexpected state; please, enter the server URL again
- Your authorization expired. Please, authorize again
- Please, enter the current password
- Your session expired. Please connect again
+ Unexpected state; please, enter the server URL again
+ Your authorization expired. Please, authorize again
+ Please, enter the current password
+ Your session expired. Please connect again
Connecting to authentication server…
- The server does not support this authentication method
+ The server does not support this authentication method
%1$s does not support multiple accounts
+ Your server is not returning a correct user id, please contact an administrator
+
+ Cannot authenticate against this server
Keep file up to date
Rename
Remove
- "Do you really want to remove %1$s ?"
- "Do you really want to remove %1$s and its contents ?"
+ "Do you really want to remove %1$s?"
+ "Do you really want to remove %1$s and its contents?"
Local only
Local contents only
Remove from server
@@ -185,10 +207,13 @@
"Rename could not be completed"
Remote file could not be checked
File contents already synchronized
- Directory could not be created
+ Folder could not be created
+ Forbidden characters: / \\ < > : " | ? *
+ File name cannot be empty
Wait a moment
"Unexpected problem ; please select the file from a different app"
No file was selected
+ Send link to …
Login with oAuth2
Connecting to oAuth2 server…
@@ -215,6 +240,8 @@
To:
Signature:
Algorithm:
+ The certificate could not be shown.
+ - No information about the error
This is a placeholder
placeholder.txt
@@ -224,6 +251,7 @@
12:23:45
Upload pictures via WiFi only
+ Upload videos via WiFi only
/InstantUpload
Update conflict
Remote file %s is not synchronized with local file. Continuing will replace content of file on server.
@@ -232,18 +260,62 @@
Don\'t upload
Image preview
- This image can not be shown
+ This image cannot be shown
- %1$s could not be copied to %2$s local directory
- Failed InstantUpload"
- Failed instant uploads
- Summary of all failed instant uploads
- select all
- retry all selected
- delete all selected from uploadqueue
- retry to upload the image:
- Load more Picrures
- do nothing you are not online for instant upload
- Failure Message:
- Please check your server configuration,maybe your quota is exceeded.
+ %1$s could not be copied to %2$s local folder
+ Upload Path
+
+ Sorry, sharing is not enabled on your server. Please contact your
+ administrator.
+ Unable to share. Please check whether the file exists
+ An error occurred while trying to share this file or folder
+ Unable to unshare. Please check whether the file exists
+ An error occurred while trying to unshare this file or folder
+
+ Send
+
+ Copy link
+ Copied to clipboard
+
+ Critical error: cannot perform operations
+
+ An error occurred while connecting with the server.
+ An error occurred while waiting for the server, the operation couldn\'t have been done
+ An error occurred while waiting for the server, the operation couldn\'t have been done
+ The operation couldn\'t be completed, server is unavailable
+
+
+ You do not have permission %s
+ to rename this file
+ to delete this file
+ to share this file
+ to unshare this file
+ to create the file
+ to upload in this folder
+ The file is no longer available on the server
+
+ Accounts
+ Add account
+ Secure connection is redirected to an unsecured route.
+
+ Logs
+ Send History
+ ownCloud Android app logs
+ Loading data...
+
+ Authentication required
+ Wrong password
+ Move
+ Nothing in here. You can add a folder!
+ Choose
+
+ Unable to move. Please check whether the file exists
+ It is not possible to move a folder into a descendant
+ The file exists already in the destination folder
+ An error occurred while trying to move this file or folder
+ to move this file
+
+ Instant Uploads
+ Security
+
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 034ca5cbb7..c65cbadd70 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -59,7 +59,7 @@
-
diff --git a/res/values/versioned_styles.xml b/res/values/versioned_styles.xml
index cd6c1f515b..5faa6b2af4 100644
--- a/res/values/versioned_styles.xml
+++ b/res/values/versioned_styles.xml
@@ -16,4 +16,16 @@
- @drawable/abs__progress_medium_holo
+
+
+
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index a7f76f5bd8..3b8b3e81b5 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -18,30 +18,44 @@
along with this program. If not, see .
-->
-
+
+
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
@@ -57,4 +71,4 @@
-
\ No newline at end of file
+
diff --git a/setup_env.bat b/setup_env.bat
index 265ff59459..dc44a12069 100644
--- a/setup_env.bat
+++ b/setup_env.bat
@@ -1,6 +1,7 @@
call git submodule init
call git submodule update
call android.bat update project -p actionbarsherlock\library -n ActionBarSherlock
+call android.bat update lib-project -p owncloud-android-library
call android.bat update project -p .
call android.bat update project -p oc_jb_workaround
copy /Y third_party\android-support-library\android-support-v4.jar actionbarsherlock\library\libs\android-support-v4.jar
diff --git a/setup_env.sh b/setup_env.sh
index d18ce22666..ae4214238b 100755
--- a/setup_env.sh
+++ b/setup_env.sh
@@ -1,8 +1,9 @@
-#!/bin/bash
+#!/bin/bash -e
git submodule init
git submodule update
android update project -p actionbarsherlock/library -n ActionBarSherlock
+android update lib-project -p owncloud-android-library
android update project -p .
android update project -p oc_jb_workaround
cp third_party/android-support-library/android-support-v4.jar actionbarsherlock/library/libs/android-support-v4.jar
diff --git a/src/com/owncloud/android/Log_OC.java b/src/com/owncloud/android/Log_OC.java
deleted file mode 100644
index 5a1be29802..0000000000
--- a/src/com/owncloud/android/Log_OC.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.owncloud.android;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-import android.util.Log;
-
-
-
-public class Log_OC {
-
-
- private static boolean isEnabled = false;
- private static File logFile;
- private static File folder;
- private static BufferedWriter buf;
-
- public static void i(String TAG, String message){
- // Printing the message to LogCat console
- Log.i(TAG, message);
- // Write the log message to the file
- appendLog(TAG+" : "+message);
- }
-
- public static void d(String TAG, String message){
- Log.d(TAG, message);
- appendLog(TAG + " : " + message);
- }
- public static void d(String TAG, String message, Exception e) {
- Log.d(TAG, message, e);
- appendLog(TAG + " : " + message + " Exception : "+ e.getStackTrace());
- }
- public static void e(String TAG, String message){
- Log.e(TAG, message);
- appendLog(TAG + " : " + message);
- }
-
- public static void e(String TAG, String message, Throwable e) {
- Log.e(TAG, message, e);
- appendLog(TAG+" : " + message +" Exception : " + e.getStackTrace());
- }
-
- public static void v(String TAG, String message){
- Log.v(TAG, message);
- appendLog(TAG+" : "+ message);
- }
-
- public static void w(String TAG, String message) {
- Log.w(TAG,message);
- appendLog(TAG+" : "+ message);
- }
-
- public static void wtf(String TAG, String message) {
- Log.wtf(TAG,message);
- appendLog(TAG+" : "+ message);
- }
-
- public static void startLogging(String logPath) {
- folder = new File(logPath);
- logFile = new File(folder + File.separator + "log.txt");
-
- if (!folder.exists()) {
- folder.mkdirs();
- }
- if (logFile.exists()) {
- logFile.delete();
- }
- try {
- logFile.createNewFile();
- buf = new BufferedWriter(new FileWriter(logFile, true));
- isEnabled = true;
- appendPhoneInfo();
- }catch (IOException e){
- e.printStackTrace();
- }
- }
-
- public static void stopLogging() {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
- String currentDateandTime = sdf.format(new Date());
- if (logFile != null) {
- logFile.renameTo(new File(folder + File.separator + MainApp.getLogName() + currentDateandTime+".log"));
-
- isEnabled = false;
- try {
- buf.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
-
- }
-
- private static void appendPhoneInfo() {
- appendLog("Model : " + android.os.Build.MODEL);
- appendLog("Brand : " + android.os.Build.BRAND);
- appendLog("Product : " + android.os.Build.PRODUCT);
- appendLog("Device : " + android.os.Build.DEVICE);
- appendLog("Version-Codename : " + android.os.Build.VERSION.CODENAME);
- appendLog("Version-Release : " + android.os.Build.VERSION.RELEASE);
- }
-
- private static void appendLog(String text) {
- if (isEnabled) {
- try {
- buf.append(text);
- buf.newLine();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-}
-
-
-
-
-
-
-
-
-}
diff --git a/src/com/owncloud/android/MainApp.java b/src/com/owncloud/android/MainApp.java
index 6cd88fe1cf..e04239df87 100644
--- a/src/com/owncloud/android/MainApp.java
+++ b/src/com/owncloud/android/MainApp.java
@@ -18,20 +18,57 @@ package com.owncloud.android;
import android.app.Application;
import android.content.Context;
+
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
+import com.owncloud.android.lib.common.utils.Log_OC;
/**
* Main Application of the project
*
- * Contains methods to build the "static" strings. These strings were before constants in different classes
+ * Contains methods to build the "static" strings. These strings were before constants in different
+ * classes
*
* @author masensio
+ * @author David A. Velasco
*/
public class MainApp extends Application {
+
+ private static final String AUTH_ON = "on";
+
+ @SuppressWarnings("unused")
+ private static final String POLICY_SINGLE_SESSION_PER_ACCOUNT = "single session per account";
+ @SuppressWarnings("unused")
+ private static final String POLICY_ALWAYS_NEW_CLIENT = "always new client";
private static Context mContext;
-
+
public void onCreate(){
super.onCreate();
MainApp.mContext = getApplicationContext();
+
+ boolean isSamlAuth = AUTH_ON.equals(getString(R.string.auth_method_saml_web_sso));
+
+ if (isSamlAuth) {
+ OwnCloudClientManagerFactory.setDefaultPolicy(Policy.SINGLE_SESSION_PER_ACCOUNT);
+
+ } else {
+ OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT);
+ }
+
+ // initialise thumbnails cache on background thread
+ new ThumbnailsCacheManager.InitDiskCacheTask().execute();
+
+ if (BuildConfig.DEBUG) {
+
+ String dataFolder = getDataFolder();
+
+ // Set folder for store logs
+ Log_OC.setLogDataFolder(dataFolder);
+
+ Log_OC.startLogging();
+ Log_OC.d("Debug", "start logging");
+ }
}
public static Context getAppContext() {
@@ -44,7 +81,7 @@ public class MainApp extends Application {
public static String getAccountType() {
return getAppContext().getResources().getString(R.string.account_type);
}
-
+
// From AccountAuthenticator
// public static final String AUTHORITY = "org.owncloud";
public static String getAuthority() {
@@ -57,30 +94,6 @@ public class MainApp extends Application {
return getAppContext().getResources().getString(R.string.authority);
}
- // From AccountAuthenticator
- // public static final String AUTH_TOKEN_TYPE_PASSWORD = "owncloud.password";
- public static String getAuthTokenTypePass() {
- return getAppContext().getResources().getString(R.string.account_type) + ".password";
- }
-
- // From AccountAuthenticator
- // public static final String AUTH_TOKEN_TYPE_ACCESS_TOKEN = "owncloud.oauth2.access_token";
- public static String getAuthTokenTypeAccessToken() {
- return getAppContext().getResources().getString(R.string.account_type) + ".oauth2.access_token";
- }
-
- // From AccountAuthenticator
- // public static final String AUTH_TOKEN_TYPE_REFRESH_TOKEN = "owncloud.oauth2.refresh_token";
- public static String getAuthTokenTypeRefreshToken() {
- return getAppContext().getResources().getString(R.string.account_type) + ".oauth2.refresh_token";
- }
-
- // From AccountAuthenticator
- // public static final String AUTH_TOKEN_TYPE_SAML_WEB_SSO_SESSION_COOKIE = "owncloud.saml.web_sso.session_cookie";
- public static String getAuthTokenTypeSamlSessionCookie() {
- return getAppContext().getResources().getString(R.string.account_type) + ".saml.web_sso.session_cookie";
- }
-
// From ProviderMeta
// public static final String DB_FILE = "owncloud.db";
public static String getDBFile() {
@@ -102,4 +115,5 @@ public class MainApp extends Application {
public static String getLogName() {
return getAppContext().getResources().getString(R.string.log_name);
}
+
}
diff --git a/src/com/owncloud/android/authentication/AccountAuthenticator.java b/src/com/owncloud/android/authentication/AccountAuthenticator.java
index ff0782d508..1d52fd0139 100644
--- a/src/com/owncloud/android/authentication/AccountAuthenticator.java
+++ b/src/com/owncloud/android/authentication/AccountAuthenticator.java
@@ -18,7 +18,6 @@
package com.owncloud.android.authentication;
-import com.owncloud.android.Log_OC;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
@@ -29,7 +28,8 @@ import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
-
+import com.owncloud.android.lib.common.accounts.AccountTypeUtils;
+import com.owncloud.android.lib.common.utils.Log_OC;
/**
@@ -53,34 +53,6 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
public static final String KEY_LOGIN_OPTIONS = "loginOptions";
public static final String KEY_ACCOUNT = "account";
- /**
- * Value under this key should handle path to webdav php script. Will be
- * removed and usage should be replaced by combining
- * {@link com.owncloud.android.authentication.AuthenticatorActivity.KEY_OC_BASE_URL} and
- * {@link com.owncloud.android.utils.OwnCloudVersion}
- *
- * @deprecated
- */
- public static final String KEY_OC_URL = "oc_url";
- /**
- * Version should be 3 numbers separated by dot so it can be parsed by
- * {@link com.owncloud.android.utils.OwnCloudVersion}
- */
- public static final String KEY_OC_VERSION = "oc_version";
- /**
- * Base url should point to owncloud installation without trailing / ie:
- * http://server/path or https://owncloud.server
- */
- public static final String KEY_OC_BASE_URL = "oc_base_url";
- /**
- * Flag signaling if the ownCloud server can be accessed with OAuth2 access tokens.
- */
- public static final String KEY_SUPPORTS_OAUTH2 = "oc_supports_oauth2";
- /**
- * Flag signaling if the ownCloud server can be accessed with session cookies from SAML-based web single-sign-on.
- */
- public static final String KEY_SUPPORTS_SAML_WEB_SSO = "oc_supports_saml_web_sso";
-
private static final String TAG = AccountAuthenticator.class.getSimpleName();
private Context mContext;
@@ -204,7 +176,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
/// check if required token is stored
final AccountManager am = AccountManager.get(mContext);
String accessToken;
- if (authTokenType.equals(MainApp.getAuthTokenTypePass())) {
+ if (authTokenType.equals(AccountTypeUtils.getAuthTokenTypePass(MainApp.getAccountType()))) {
accessToken = am.getPassword(account);
} else {
accessToken = am.peekAuthToken(account, authTokenType);
@@ -223,8 +195,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
intent.putExtra(KEY_AUTH_TOKEN_TYPE, authTokenType);
intent.putExtra(KEY_LOGIN_OPTIONS, options);
intent.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, account);
- intent.putExtra(AuthenticatorActivity.EXTRA_ENFORCED_UPDATE, true);
- intent.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_UPDATE_TOKEN);
+ intent.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN);
final Bundle bundle = new Bundle();
@@ -285,10 +256,10 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
private void validateAuthTokenType(String authTokenType)
throws UnsupportedAuthTokenTypeException {
if (!authTokenType.equals(MainApp.getAuthTokenType()) &&
- !authTokenType.equals(MainApp.getAuthTokenTypePass()) &&
- !authTokenType.equals(MainApp.getAuthTokenTypeAccessToken()) &&
- !authTokenType.equals(MainApp.getAuthTokenTypeRefreshToken()) &&
- !authTokenType.equals(MainApp.getAuthTokenTypeSamlSessionCookie())) {
+ !authTokenType.equals(AccountTypeUtils.getAuthTokenTypePass(MainApp.getAccountType())) &&
+ !authTokenType.equals(AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType())) &&
+ !authTokenType.equals(AccountTypeUtils.getAuthTokenTypeRefreshToken(MainApp.getAccountType())) &&
+ !authTokenType.equals(AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()))) {
throw new UnsupportedAuthTokenTypeException();
}
}
diff --git a/src/com/owncloud/android/authentication/AccountUtils.java b/src/com/owncloud/android/authentication/AccountUtils.java
index 3b79c39b9f..dc023444fd 100644
--- a/src/com/owncloud/android/authentication/AccountUtils.java
+++ b/src/com/owncloud/android/authentication/AccountUtils.java
@@ -18,12 +18,14 @@
package com.owncloud.android.authentication;
+import java.util.Locale;
+
import com.owncloud.android.MainApp;
-import com.owncloud.android.utils.OwnCloudVersion;
+import com.owncloud.android.lib.common.accounts.AccountTypeUtils;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
import android.accounts.Account;
import android.accounts.AccountManager;
-import android.accounts.AccountsException;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
@@ -81,8 +83,18 @@ public class AccountUtils {
MainApp.getAccountType());
if (account != null && account.name != null) {
- for (Account ac : ocAccounts) {
- if (ac.name.equals(account.name)) {
+ int lastAtPos = account.name.lastIndexOf("@");
+ String hostAndPort = account.name.substring(lastAtPos + 1);
+ String username = account.name.substring(0, lastAtPos);
+ String otherHostAndPort, otherUsername;
+ Locale currentLocale = context.getResources().getConfiguration().locale;
+ for (Account otherAccount : ocAccounts) {
+ lastAtPos = otherAccount.name.lastIndexOf("@");
+ otherHostAndPort = otherAccount.name.substring(lastAtPos + 1);
+ otherUsername = otherAccount.name.substring(0, lastAtPos);
+ if (otherHostAndPort.equals(hostAndPort) &&
+ otherUsername.toLowerCase(currentLocale).
+ equals(username.toLowerCase(currentLocale))) {
return true;
}
}
@@ -126,30 +138,6 @@ public class AccountUtils {
return result;
}
- /**
- *
- * @param version version of owncloud
- * @return webdav path for given OC version, null if OC version unknown
- */
- public static String getWebdavPath(OwnCloudVersion version, boolean supportsOAuth, boolean supportsSamlSso) {
- if (version != null) {
- if (supportsOAuth) {
- return ODAV_PATH;
- }
- if (supportsSamlSso) {
- return SAML_SSO_PATH;
- }
- if (version.compareTo(OwnCloudVersion.owncloud_v4) >= 0)
- return WEBDAV_PATH_4_0;
- if (version.compareTo(OwnCloudVersion.owncloud_v3) >= 0
- || version.compareTo(OwnCloudVersion.owncloud_v2) >= 0)
- return WEBDAV_PATH_2_0;
- if (version.compareTo(OwnCloudVersion.owncloud_v1) >= 0)
- return WEBDAV_PATH_1_2;
- }
- return null;
- }
-
/**
* Returns the proper URL path to access the WebDAV interface of an ownCloud server,
* according to its version and the authorization method used.
@@ -160,10 +148,10 @@ public class AccountUtils {
*/
public static String getWebdavPath(OwnCloudVersion version, String authTokenType) {
if (version != null) {
- if (MainApp.getAuthTokenTypeAccessToken().equals(authTokenType)) {
+ if (AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType()).equals(authTokenType)) {
return ODAV_PATH;
}
- if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(authTokenType)) {
+ if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).equals(authTokenType)) {
return SAML_SSO_PATH;
}
if (version.compareTo(OwnCloudVersion.owncloud_v4) >= 0)
@@ -177,44 +165,4 @@ public class AccountUtils {
return null;
}
- /**
- * Constructs full url to host and webdav resource basing on host version
- * @param context
- * @param account
- * @return url or null on failure
- * @throws AccountNotFoundException When 'account' is unknown for the AccountManager
- */
- public static String constructFullURLForAccount(Context context, Account account) throws AccountNotFoundException {
- AccountManager ama = AccountManager.get(context);
- String baseurl = ama.getUserData(account, AccountAuthenticator.KEY_OC_BASE_URL);
- String strver = ama.getUserData(account, AccountAuthenticator.KEY_OC_VERSION);
- boolean supportsOAuth = (ama.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null);
- boolean supportsSamlSso = (ama.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null);
- OwnCloudVersion ver = new OwnCloudVersion(strver);
- String webdavpath = getWebdavPath(ver, supportsOAuth, supportsSamlSso);
-
- if (baseurl == null || webdavpath == null)
- throw new AccountNotFoundException(account, "Account not found", null);
-
- return baseurl + webdavpath;
- }
-
-
- public static class AccountNotFoundException extends AccountsException {
-
- /** Generated - should be refreshed every time the class changes!! */
- private static final long serialVersionUID = -9013287181793186830L;
-
- private Account mFailedAccount;
-
- public AccountNotFoundException(Account failedAccount, String message, Throwable cause) {
- super(message, cause);
- mFailedAccount = failedAccount;
- }
-
- public Account getFailedAccount() {
- return mFailedAccount;
- }
- }
-
}
diff --git a/src/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/com/owncloud/android/authentication/AuthenticatorActivity.java
index faeffd530a..97dcfde83c 100644
--- a/src/com/owncloud/android/authentication/AuthenticatorActivity.java
+++ b/src/com/owncloud/android/authentication/AuthenticatorActivity.java
@@ -1,6 +1,6 @@
/* ownCloud Android client application
* Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
+ * Copyright (C) 2012-2014 ownCloud Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
@@ -18,22 +18,28 @@
package com.owncloud.android.authentication;
+import java.security.cert.X509Certificate;
+import java.util.Map;
+
import android.accounts.Account;
import android.accounts.AccountManager;
-import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.ProgressDialog;
-import android.content.ContentResolver;
-import android.content.DialogInterface;
+import android.content.ComponentName;
+import android.content.Context;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.net.http.SslError;
import android.os.Bundle;
import android.os.Handler;
+import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentTransaction;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
@@ -44,129 +50,138 @@ import android.view.View.OnFocusChangeListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.inputmethod.EditorInfo;
+import android.webkit.HttpAuthHandler;
+import android.webkit.SslErrorHandler;
+import android.webkit.WebView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
+import android.widget.Toast;
import com.actionbarsherlock.app.SherlockDialogFragment;
-import com.owncloud.android.Log_OC;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.SsoWebViewClient.SsoWebViewClientListener;
-import com.owncloud.android.network.OwnCloudClientUtils;
-import com.owncloud.android.operations.ExistenceCheckOperation;
+import com.owncloud.android.lib.common.accounts.AccountTypeUtils;
+import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
+import com.owncloud.android.lib.common.network.CertificateCombinedException;
+import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation;
+import com.owncloud.android.operations.DetectAuthenticationMethodOperation.AuthenticationMethod;
+import com.owncloud.android.operations.GetServerInfoOperation;
import com.owncloud.android.operations.OAuth2GetAccessToken;
-import com.owncloud.android.operations.OnRemoteOperationListener;
-import com.owncloud.android.operations.OwnCloudServerCheckOperation;
-import com.owncloud.android.operations.RemoteOperation;
-import com.owncloud.android.operations.RemoteOperationResult;
-import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.services.OperationsService;
+import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
+import com.owncloud.android.ui.dialog.CredentialsDialogFragment;
+import com.owncloud.android.ui.dialog.IndeterminateProgressDialog;
import com.owncloud.android.ui.dialog.SamlWebViewDialog;
-import com.owncloud.android.ui.dialog.SslValidatorDialog;
-import com.owncloud.android.ui.dialog.SslValidatorDialog.OnSslValidatorListener;
-import com.owncloud.android.utils.OwnCloudVersion;
-
-
-import eu.alefzero.webdav.WebdavClient;
+import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
+import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;
/**
* This Activity is used to add an ownCloud account to the App
*
* @author Bartek Przybylski
* @author David A. Velasco
+ * @author masensio
*/
public class AuthenticatorActivity extends AccountAuthenticatorActivity
-implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeListener, OnEditorActionListener, SsoWebViewClientListener{
+implements OnRemoteOperationListener, OnFocusChangeListener, OnEditorActionListener,
+SsoWebViewClientListener, OnSslUntrustedCertListener {
private static final String TAG = AuthenticatorActivity.class.getSimpleName();
- public static final String EXTRA_ACCOUNT = "ACCOUNT";
- public static final String EXTRA_USER_NAME = "USER_NAME";
- public static final String EXTRA_HOST_NAME = "HOST_NAME";
public static final String EXTRA_ACTION = "ACTION";
- public static final String EXTRA_ENFORCED_UPDATE = "ENFORCE_UPDATE";
+ public static final String EXTRA_ACCOUNT = "ACCOUNT";
+
+ private static final String KEY_AUTH_TOKEN_TYPE = "AUTH_TOKEN_TYPE";
- private static final String KEY_AUTH_MESSAGE_VISIBILITY = "AUTH_MESSAGE_VISIBILITY";
- private static final String KEY_AUTH_MESSAGE_TEXT = "AUTH_MESSAGE_TEXT";
private static final String KEY_HOST_URL_TEXT = "HOST_URL_TEXT";
private static final String KEY_OC_VERSION = "OC_VERSION";
- private static final String KEY_ACCOUNT = "ACCOUNT";
private static final String KEY_SERVER_VALID = "SERVER_VALID";
private static final String KEY_SERVER_CHECKED = "SERVER_CHECKED";
- private static final String KEY_SERVER_CHECK_IN_PROGRESS = "SERVER_CHECK_IN_PROGRESS";
private static final String KEY_SERVER_STATUS_TEXT = "SERVER_STATUS_TEXT";
private static final String KEY_SERVER_STATUS_ICON = "SERVER_STATUS_ICON";
private static final String KEY_IS_SSL_CONN = "IS_SSL_CONN";
- private static final String KEY_PASSWORD_VISIBLE = "PASSWORD_VISIBLE";
+ private static final String KEY_PASSWORD_EXPOSED = "PASSWORD_VISIBLE";
private static final String KEY_AUTH_STATUS_TEXT = "AUTH_STATUS_TEXT";
private static final String KEY_AUTH_STATUS_ICON = "AUTH_STATUS_ICON";
- private static final String KEY_REFRESH_BUTTON_ENABLED = "KEY_REFRESH_BUTTON_ENABLED";
-
- private static final String KEY_OC_USERNAME_EQUALS = "oc_username=";
+ private static final String KEY_SERVER_AUTH_METHOD = "SERVER_AUTH_METHOD";
+ private static final String KEY_WAITING_FOR_OP_ID = "WAITING_FOR_OP_ID";
+ private static final String KEY_AUTH_TOKEN = "AUTH_TOKEN";
private static final String AUTH_ON = "on";
- private static final String AUTH_OFF = "off";
private static final String AUTH_OPTIONAL = "optional";
-
- private static final int DIALOG_LOGIN_PROGRESS = 0;
- private static final int DIALOG_SSL_VALIDATOR = 1;
- private static final int DIALOG_CERT_NOT_SAVED = 2;
- private static final int DIALOG_OAUTH2_LOGIN_PROGRESS = 3;
public static final byte ACTION_CREATE = 0;
- public static final byte ACTION_UPDATE_TOKEN = 1;
+ public static final byte ACTION_UPDATE_TOKEN = 1; // requested by the user
+ public static final byte ACTION_UPDATE_EXPIRED_TOKEN = 2; // detected by the app
+
+ private static final String UNTRUSTED_CERT_DIALOG_TAG = "UNTRUSTED_CERT_DIALOG";
+ private static final String SAML_DIALOG_TAG = "SAML_DIALOG";
+ private static final String WAIT_DIALOG_TAG = "WAIT_DIALOG";
+ private static final String CREDENTIALS_DIALOG_TAG = "CREDENTIALS_DIALOG";
+ private static final String KEY_AUTH_IS_FIRST_ATTEMPT_TAG = "KEY_AUTH_IS_FIRST_ATTEMPT";
- private static final String TAG_SAML_DIALOG = "samlWebViewDialog";
- private String mHostBaseUrl;
- private OwnCloudVersion mDiscoveredVersion;
-
- private String mAuthMessageText;
- private int mAuthMessageVisibility, mServerStatusText, mServerStatusIcon;
- private boolean mServerIsChecked, mServerIsValid, mIsSslConn;
- private int mAuthStatusText, mAuthStatusIcon;
- private TextView mAuthStatusLayout;
-
- private final Handler mHandler = new Handler();
- private Thread mOperationThread;
- private OwnCloudServerCheckOperation mOcServerChkOperation;
- private ExistenceCheckOperation mAuthCheckOperation;
- private RemoteOperationResult mLastSslUntrustedServerResult;
-
- private Uri mNewCapturedUriFromOAuth2Redirection;
-
- private AccountManager mAccountMgr;
- private boolean mJustCreated;
+ /// parameters from EXTRAs in starter Intent
private byte mAction;
private Account mAccount;
-
- private TextView mAuthMessage;
-
- private EditText mHostUrlInput;
- private boolean mHostUrlInputEnabled;
- private View mRefreshButton;
-
private String mAuthTokenType;
+
+
+ /// activity-level references / state
+ private final Handler mHandler = new Handler();
+ private ServiceConnection mOperationsServiceConnection = null;
+ private OperationsServiceBinder mOperationsServiceBinder = null;
+ private AccountManager mAccountMgr;
+ private Uri mNewCapturedUriFromOAuth2Redirection;
+
+
+ /// Server PRE-Fragment elements
+ private EditText mHostUrlInput;
+ private View mRefreshButton;
+ private TextView mServerStatusView;
- private EditText mUsernameInput;
- private EditText mPasswordInput;
+ private TextWatcher mHostUrlInputWatcher;
+ private int mServerStatusText = 0, mServerStatusIcon = 0;
+ private boolean mServerIsChecked = false;
+ private boolean mServerIsValid = false;
+ private boolean mPendingAutoCheck = false;
+
+ private GetServerInfoOperation.ServerInfo mServerInfo =
+ new GetServerInfoOperation.ServerInfo();
+
+
+ /// Authentication PRE-Fragment elements
private CheckBox mOAuth2Check;
-
private TextView mOAuthAuthEndpointText;
private TextView mOAuthTokenEndpointText;
-
- private SamlWebViewDialog mSamlDialog;
-
+ private EditText mUsernameInput;
+ private EditText mPasswordInput;
private View mOkButton;
-
- private String mAuthToken;
-
- private boolean mResumed; // Control if activity is resumed
+ private TextView mAuthStatusView;
+ private int mAuthStatusText = 0, mAuthStatusIcon = 0;
+
+ private String mAuthToken = "";
+ private boolean mIsFirstAuthAttempt;
+
+
+ /// Identifier of operation in progress which result shouldn't be lost
+ private long mWaitingForOpId = Long.MAX_VALUE;
+
+
/**
* {@inheritDoc}
*
@@ -174,165 +189,202 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
+ //Log_OC.wtf(TAG, "onCreate init");
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
- /// set view and get references to view elements
- setContentView(R.layout.account_setup);
- mAuthMessage = (TextView) findViewById(R.id.auth_message);
- mHostUrlInput = (EditText) findViewById(R.id.hostUrlInput);
- mHostUrlInput.setText(getString(R.string.server_url)); // valid although R.string.server_url is an empty string
- mUsernameInput = (EditText) findViewById(R.id.account_username);
- mPasswordInput = (EditText) findViewById(R.id.account_password);
- mOAuthAuthEndpointText = (TextView)findViewById(R.id.oAuthEntryPoint_1);
- mOAuthTokenEndpointText = (TextView)findViewById(R.id.oAuthEntryPoint_2);
- mOAuth2Check = (CheckBox) findViewById(R.id.oauth_onOff_check);
- mOkButton = findViewById(R.id.buttonOK);
- mAuthStatusLayout = (TextView) findViewById(R.id.auth_status_text);
-
- /// set Host Url Input Enabled
- mHostUrlInputEnabled = getResources().getBoolean(R.bool.show_server_url_input);
-
- /// set visibility of link for new users
- boolean accountRegisterVisibility = getResources().getBoolean(R.bool.show_welcome_link);
- Button welcomeLink = (Button) findViewById(R.id.welcome_link);
- if (welcomeLink != null) {
- if (accountRegisterVisibility) {
- welcomeLink.setVisibility(View.VISIBLE);
- welcomeLink.setText(String.format(getString(R.string.auth_register), getString(R.string.app_name)));
- } else {
- findViewById(R.id.welcome_link).setVisibility(View.GONE);
- }
+ mIsFirstAuthAttempt = true;
+
+ // bind to Operations Service
+ mOperationsServiceConnection = new OperationsServiceConnection();
+ if (!bindService(new Intent(this, OperationsService.class),
+ mOperationsServiceConnection,
+ Context.BIND_AUTO_CREATE)) {
+ Toast.makeText(this,
+ R.string.error_cant_bind_to_operations_service,
+ Toast.LENGTH_LONG)
+ .show();
+ finish();
}
- /// initialization
+ /// init activity state
mAccountMgr = AccountManager.get(this);
mNewCapturedUriFromOAuth2Redirection = null;
- mAction = getIntent().getByteExtra(EXTRA_ACTION, ACTION_CREATE);
- mAccount = null;
- mHostBaseUrl = "";
- boolean refreshButtonEnabled = false;
- // URL input configuration applied
- if (!mHostUrlInputEnabled)
- {
- findViewById(R.id.hostUrlFrame).setVisibility(View.GONE);
- mRefreshButton = findViewById(R.id.centeredRefreshButton);
-
- } else {
- mRefreshButton = findViewById(R.id.embeddedRefreshButton);
- }
-
+ /// get input values
+ mAction = getIntent().getByteExtra(EXTRA_ACTION, ACTION_CREATE);
+ mAccount = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
if (savedInstanceState == null) {
- mResumed = false;
- /// connection state and info
- mAuthMessageVisibility = View.GONE;
- mServerStatusText = mServerStatusIcon = 0;
- mServerIsValid = false;
- mServerIsChecked = false;
- mIsSslConn = false;
- mAuthStatusText = mAuthStatusIcon = 0;
-
- /// retrieve extras from intent
- mAccount = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
- if (mAccount != null) {
- String ocVersion = mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION);
- if (ocVersion != null) {
- mDiscoveredVersion = new OwnCloudVersion(ocVersion);
- }
- mHostBaseUrl = normalizeUrl(mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL));
- mHostUrlInput.setText(mHostBaseUrl);
- String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@'));
- mUsernameInput.setText(userName);
- }
- initAuthorizationMethod(); // checks intent and setup.xml to determine mCurrentAuthorizationMethod
- mJustCreated = true;
-
- if (mAction == ACTION_UPDATE_TOKEN || !mHostUrlInputEnabled) {
- checkOcServer();
- }
-
+ initAuthTokenType();
+ } else {
+ mAuthTokenType = savedInstanceState.getString(KEY_AUTH_TOKEN_TYPE);
+ mWaitingForOpId = savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID);
+ mIsFirstAuthAttempt = savedInstanceState.getBoolean(KEY_AUTH_IS_FIRST_ATTEMPT_TAG);
+ }
+
+ /// load user interface
+ setContentView(R.layout.account_setup);
+
+ /// initialize general UI elements
+ initOverallUi(savedInstanceState);
+
+ mOkButton = findViewById(R.id.buttonOK);
+
+ /// initialize block to be moved to single Fragment to check server and get info about it
+ initServerPreFragment(savedInstanceState);
+
+ /// initialize block to be moved to single Fragment to retrieve and validate credentials
+ initAuthorizationPreFragment(savedInstanceState);
+
+ //Log_OC.wtf(TAG, "onCreate end");
+ }
+
+ private void initAuthTokenType() {
+ mAuthTokenType =
+ getIntent().getExtras().getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);
+ if (mAuthTokenType == null) {
+ if (mAccount != null) {
+ boolean oAuthRequired =
+ (mAccountMgr.getUserData(mAccount, Constants.KEY_SUPPORTS_OAUTH2) != null);
+ boolean samlWebSsoRequired = (
+ mAccountMgr.getUserData(
+ mAccount, Constants.KEY_SUPPORTS_SAML_WEB_SSO
+ ) != null
+ );
+ mAuthTokenType = chooseAuthTokenType(oAuthRequired, samlWebSsoRequired);
+
+ } else {
+ boolean oAuthSupported = AUTH_ON.equals(getString(R.string.auth_method_oauth2));
+ boolean samlWebSsoSupported =
+ AUTH_ON.equals(getString(R.string.auth_method_saml_web_sso));
+ mAuthTokenType = chooseAuthTokenType(oAuthSupported, samlWebSsoSupported);
+ }
+ }
+ }
+
+ private String chooseAuthTokenType(boolean oauth, boolean saml) {
+ if (saml) {
+ return AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType());
+ } else if (oauth) {
+ return AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType());
+ } else {
+ return AccountTypeUtils.getAuthTokenTypePass(MainApp.getAccountType());
+ }
+ }
+
+
+ /**
+ * Configures elements in the user interface under direct control of the Activity.
+ *
+ * @param savedInstanceState Saved activity state, as in {{@link #onCreate(Bundle)}
+ */
+ private void initOverallUi(Bundle savedInstanceState) {
+
+ /// step 1 - load and process relevant inputs (resources, intent, savedInstanceState)
+ boolean isWelcomeLinkVisible = getResources().getBoolean(R.bool.show_welcome_link);
+
+ String instructionsMessageText = null;
+ if (mAction == ACTION_UPDATE_EXPIRED_TOKEN) {
+ if (AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType())
+ .equals(mAuthTokenType)) {
+ instructionsMessageText = getString(R.string.auth_expired_oauth_token_toast);
+
+ } else if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType())
+ .equals(mAuthTokenType)) {
+ instructionsMessageText = getString(R.string.auth_expired_saml_sso_token_toast);
+
+ } else {
+ instructionsMessageText = getString(R.string.auth_expired_basic_auth_toast);
+ }
+ }
+
+ /// step 2 - set properties of UI elements (text, visibility, enabled...)
+ Button welcomeLink = (Button) findViewById(R.id.welcome_link);
+ welcomeLink.setVisibility(isWelcomeLinkVisible ? View.VISIBLE : View.GONE);
+ welcomeLink.setText(
+ String.format(getString(R.string.auth_register), getString(R.string.app_name)));
+
+ TextView instructionsView = (TextView) findViewById(R.id.instructions_message);
+ if (instructionsMessageText != null) {
+ instructionsView.setVisibility(View.VISIBLE);
+ instructionsView.setText(instructionsMessageText);
+ } else {
+ instructionsView.setVisibility(View.GONE);
+ }
+ }
+
+
+ /**
+ *
+ * @param savedInstanceState Saved activity state, as in {{@link #onCreate(Bundle)}
+ */
+ private void initServerPreFragment(Bundle savedInstanceState) {
+
+ /// step 1 - load and process relevant inputs (resources, intent, savedInstanceState)
+ boolean isUrlInputAllowed = getResources().getBoolean(R.bool.show_server_url_input);
+ if (savedInstanceState == null) {
+ if (mAccount != null) {
+ mServerInfo.mBaseUrl = mAccountMgr.getUserData(mAccount, Constants.KEY_OC_BASE_URL);
+ // TODO do next in a setter for mBaseUrl
+ mServerInfo.mIsSslConn = mServerInfo.mBaseUrl.startsWith("https://");
+ String ocVersion = mAccountMgr.getUserData(mAccount, Constants.KEY_OC_VERSION);
+ if (ocVersion != null) {
+ mServerInfo.mVersion = new OwnCloudVersion(ocVersion);
+ }
+ } else {
+ mServerInfo.mBaseUrl = getString(R.string.server_url).trim();
+ mServerInfo.mIsSslConn = mServerInfo.mBaseUrl.startsWith("https://");
+ }
} else {
- mResumed = true;
- /// connection state and info
- mAuthMessageVisibility = savedInstanceState.getInt(KEY_AUTH_MESSAGE_VISIBILITY);
- mAuthMessageText = savedInstanceState.getString(KEY_AUTH_MESSAGE_TEXT);
- mServerIsValid = savedInstanceState.getBoolean(KEY_SERVER_VALID);
- mServerIsChecked = savedInstanceState.getBoolean(KEY_SERVER_CHECKED);
mServerStatusText = savedInstanceState.getInt(KEY_SERVER_STATUS_TEXT);
mServerStatusIcon = savedInstanceState.getInt(KEY_SERVER_STATUS_ICON);
- mIsSslConn = savedInstanceState.getBoolean(KEY_IS_SSL_CONN);
- mAuthStatusText = savedInstanceState.getInt(KEY_AUTH_STATUS_TEXT);
- mAuthStatusIcon = savedInstanceState.getInt(KEY_AUTH_STATUS_ICON);
- if (savedInstanceState.getBoolean(KEY_PASSWORD_VISIBLE, false)) {
- showPassword();
- }
- /// server data
+ mServerIsValid = savedInstanceState.getBoolean(KEY_SERVER_VALID);
+ mServerIsChecked = savedInstanceState.getBoolean(KEY_SERVER_CHECKED);
+
+ // TODO parcelable
+ mServerInfo.mIsSslConn = savedInstanceState.getBoolean(KEY_IS_SSL_CONN);
+ mServerInfo.mBaseUrl = savedInstanceState.getString(KEY_HOST_URL_TEXT);
String ocVersion = savedInstanceState.getString(KEY_OC_VERSION);
if (ocVersion != null) {
- mDiscoveredVersion = new OwnCloudVersion(ocVersion);
+ mServerInfo.mVersion = new OwnCloudVersion(ocVersion);
}
- mHostBaseUrl = savedInstanceState.getString(KEY_HOST_URL_TEXT);
-
- // account data, if updating
- mAccount = savedInstanceState.getParcelable(KEY_ACCOUNT);
- mAuthTokenType = savedInstanceState.getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);
- if (mAuthTokenType == null) {
- mAuthTokenType = MainApp.getAuthTokenTypePass();
-
- }
-
- // check if server check was interrupted by a configuration change
- if (savedInstanceState.getBoolean(KEY_SERVER_CHECK_IN_PROGRESS, false)) {
- checkOcServer();
- }
+ mServerInfo.mAuthMethod = AuthenticationMethod.valueOf(
+ savedInstanceState.getString(KEY_SERVER_AUTH_METHOD));
- // refresh button enabled
- refreshButtonEnabled = savedInstanceState.getBoolean(KEY_REFRESH_BUTTON_ENABLED);
-
-
}
-
- if (mAuthMessageVisibility== View.VISIBLE) {
- showAuthMessage(mAuthMessageText);
- }
- else {
- hideAuthMessage();
- }
- adaptViewAccordingToAuthenticationMethod();
- showServerStatus();
- showAuthStatus();
- if (mAction == ACTION_UPDATE_TOKEN) {
+ /// step 2 - set properties of UI elements (text, visibility, enabled...)
+ mHostUrlInput = (EditText) findViewById(R.id.hostUrlInput);
+ mHostUrlInput.setText(mServerInfo.mBaseUrl);
+ if (mAction != ACTION_CREATE) {
/// lock things that should not change
mHostUrlInput.setEnabled(false);
mHostUrlInput.setFocusable(false);
- mUsernameInput.setEnabled(false);
- mUsernameInput.setFocusable(false);
- mOAuth2Check.setVisibility(View.GONE);
}
+ if (isUrlInputAllowed) {
+ mRefreshButton = findViewById(R.id.embeddedRefreshButton);
+ } else {
+ findViewById(R.id.hostUrlFrame).setVisibility(View.GONE);
+ mRefreshButton = findViewById(R.id.centeredRefreshButton);
+ }
+ showRefreshButton(mServerIsChecked && !mServerIsValid &&
+ mWaitingForOpId > Integer.MAX_VALUE);
+ mServerStatusView = (TextView) findViewById(R.id.server_status_text);
+ showServerStatus();
- //if (mServerIsChecked && !mServerIsValid && mRefreshButtonEnabled) showRefreshButton();
- if (mServerIsChecked && !mServerIsValid && refreshButtonEnabled) showRefreshButton();
- mOkButton.setEnabled(mServerIsValid); // state not automatically recovered in configuration changes
-
- if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType) ||
- !AUTH_OPTIONAL.equals(getString(R.string.auth_method_oauth2))) {
- mOAuth2Check.setVisibility(View.GONE);
- }
-
- mPasswordInput.setText(""); // clean password to avoid social hacking (disadvantage: password in removed if the device is turned aside)
-
- /// bind view elements to listeners and other friends
- mHostUrlInput.setOnFocusChangeListener(this);
+ /// step 3 - bind some listeners and options
mHostUrlInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
mHostUrlInput.setOnEditorActionListener(this);
- mHostUrlInput.addTextChangedListener(new TextWatcher() {
-
+
+ /// step 4 - create listeners that will be bound at onResume
+ mHostUrlInputWatcher = new TextWatcher() {
+
@Override
public void afterTextChanged(Editable s) {
- if (!mHostBaseUrl.equals(normalizeUrl(mHostUrlInput.getText().toString()))) {
+ if (mOkButton.isEnabled() &&
+ !mServerInfo.mBaseUrl.equals(
+ normalizeUrl(s.toString(), mServerInfo.mIsSslConn))) {
mOkButton.setEnabled(false);
}
}
@@ -343,18 +395,95 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
- if (!mResumed) {
+ if (mAuthStatusIcon != 0) {
+ Log_OC.d(TAG, "onTextChanged: hiding authentication status");
mAuthStatusIcon = 0;
mAuthStatusText = 0;
- showAuthStatus();
+ showAuthStatus();
}
- mResumed = false;
+ }
+ };
+
+
+ // TODO find out if this is really necessary, or if it can done in a different way
+ findViewById(R.id.scroll).setOnTouchListener(new OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ if (
+ AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(
+ MainApp.getAccountType()
+ ).equals(mAuthTokenType) &&
+ mHostUrlInput.hasFocus()
+ ) {
+ checkOcServer();
+ }
+ }
+ return false;
}
});
+
+ /// step 4 - mark automatic check to be started when OperationsService is ready
+ mPendingAutoCheck = (savedInstanceState == null &&
+ (mAction != ACTION_CREATE || !isUrlInputAllowed));
+ }
+
+
+ /**
+ *
+ * @param savedInstanceState Saved activity state, as in {{@link #onCreate(Bundle)}
+ */
+ private void initAuthorizationPreFragment(Bundle savedInstanceState) {
+
+ /// step 0 - get UI elements in layout
+ mOAuth2Check = (CheckBox) findViewById(R.id.oauth_onOff_check);
+ mOAuthAuthEndpointText = (TextView)findViewById(R.id.oAuthEntryPoint_1);
+ mOAuthTokenEndpointText = (TextView)findViewById(R.id.oAuthEntryPoint_2);
+ mUsernameInput = (EditText) findViewById(R.id.account_username);
+ mPasswordInput = (EditText) findViewById(R.id.account_password);
+ mAuthStatusView = (TextView) findViewById(R.id.auth_status_text);
+
+ /// step 1 - load and process relevant inputs (resources, intent, savedInstanceState)
+ String presetUserName = null;
+ boolean isPasswordExposed = false;
+ if (savedInstanceState == null) {
+ if (mAccount != null) {
+ presetUserName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@'));
+ }
+
+ } else {
+ isPasswordExposed = savedInstanceState.getBoolean(KEY_PASSWORD_EXPOSED, false);
+ mAuthStatusText = savedInstanceState.getInt(KEY_AUTH_STATUS_TEXT);
+ mAuthStatusIcon = savedInstanceState.getInt(KEY_AUTH_STATUS_ICON);
+ mAuthToken = savedInstanceState.getString(KEY_AUTH_TOKEN);
+ }
+
+ /// step 2 - set properties of UI elements (text, visibility, enabled...)
+ mOAuth2Check.setChecked(
+ AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType())
+ .equals(mAuthTokenType));
+ if (presetUserName != null) {
+ mUsernameInput.setText(presetUserName);
+ }
+ if (mAction != ACTION_CREATE) {
+ mUsernameInput.setEnabled(false);
+ mUsernameInput.setFocusable(false);
+ }
+ mPasswordInput.setText(""); // clean password to avoid social hacking
+ if (isPasswordExposed) {
+ showPassword();
+ }
+ updateAuthenticationPreFragmentVisibility();
+ showAuthStatus();
+ mOkButton.setEnabled(mServerIsValid);
+
+
+ /// step 3 - bind listeners
+ // bindings for password input field
mPasswordInput.setOnFocusChangeListener(this);
mPasswordInput.setImeOptions(EditorInfo.IME_ACTION_DONE);
- mPasswordInput.setOnEditorActionListener(this);
+ mPasswordInput.setOnEditorActionListener(this);
mPasswordInput.setOnTouchListener(new RightDrawableOnTouchListener() {
@Override
public boolean onDrawableTouch(final MotionEvent event) {
@@ -365,110 +494,101 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
}
});
- findViewById(R.id.scroll).setOnTouchListener(new OnTouchListener() {
- @Override
- public boolean onTouch(View view, MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType) &&
- mHostUrlInput.hasFocus()) {
- checkOcServer();
- }
- }
- return false;
- }
- });
}
-
-
- private void initAuthorizationMethod() {
- boolean oAuthRequired = false;
- boolean samlWebSsoRequired = false;
- mAuthTokenType = getIntent().getExtras().getString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE);
- mAccount = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT);
-
- // TODO could be a good moment to validate the received token type, if not null
-
- if (mAuthTokenType == null) {
- if (mAccount != null) {
- /// same authentication method than the one used to create the account to update
- oAuthRequired = (mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null);
- samlWebSsoRequired = (mAccountMgr.getUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null);
+ /**
+ * Changes the visibility of input elements depending on
+ * the current authorization method.
+ */
+ private void updateAuthenticationPreFragmentVisibility () {
+ if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).
+ equals(mAuthTokenType)) {
+ // SAML-based web Single Sign On
+ mOAuth2Check.setVisibility(View.GONE);
+ mOAuthAuthEndpointText.setVisibility(View.GONE);
+ mOAuthTokenEndpointText.setVisibility(View.GONE);
+ mUsernameInput.setVisibility(View.GONE);
+ mPasswordInput.setVisibility(View.GONE);
+ } else {
+ if (mAction == ACTION_CREATE &&
+ AUTH_OPTIONAL.equals(getString(R.string.auth_method_oauth2))) {
+ mOAuth2Check.setVisibility(View.VISIBLE);
} else {
- /// use the one set in setup.xml
- oAuthRequired = AUTH_ON.equals(getString(R.string.auth_method_oauth2));
- samlWebSsoRequired = AUTH_ON.equals(getString(R.string.auth_method_saml_web_sso));
+ mOAuth2Check.setVisibility(View.GONE);
}
- if (oAuthRequired) {
- mAuthTokenType = MainApp.getAuthTokenTypeAccessToken();
- } else if (samlWebSsoRequired) {
- mAuthTokenType = MainApp.getAuthTokenTypeSamlSessionCookie();
- } else {
- mAuthTokenType = MainApp.getAuthTokenTypePass();
- }
- }
+
+ if (AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType()).
+ equals(mAuthTokenType)) {
+ // OAuth 2 authorization
+
+ mOAuthAuthEndpointText.setVisibility(View.VISIBLE);
+ mOAuthTokenEndpointText.setVisibility(View.VISIBLE);
+ mUsernameInput.setVisibility(View.GONE);
+ mPasswordInput.setVisibility(View.GONE);
- if (mAccount != null) {
- String userName = mAccount.name.substring(0, mAccount.name.lastIndexOf('@'));
- mUsernameInput.setText(userName);
+ } else {
+ // basic HTTP authorization
+ mOAuthAuthEndpointText.setVisibility(View.GONE);
+ mOAuthTokenEndpointText.setVisibility(View.GONE);
+ mUsernameInput.setVisibility(View.VISIBLE);
+ mPasswordInput.setVisibility(View.VISIBLE);
+ }
}
-
- mOAuth2Check.setChecked(MainApp.getAuthTokenTypeAccessToken().equals(mAuthTokenType));
-
}
+
+
/**
* Saves relevant state before {@link #onPause()}
*
- * Do NOT save {@link #mNewCapturedUriFromOAuth2Redirection}; it keeps a temporal flag, intended to defer the
- * processing of the redirection caught in {@link #onNewIntent(Intent)} until {@link #onResume()}
+ * Do NOT save {@link #mNewCapturedUriFromOAuth2Redirection}; it keeps a temporal flag,
+ * intended to defer the processing of the redirection caught in
+ * {@link #onNewIntent(Intent)} until {@link #onResume()}
*
* See {@link #loadSavedInstanceState(Bundle)}
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
+ //Log_OC.wtf(TAG, "onSaveInstanceState init" );
super.onSaveInstanceState(outState);
- /// connection state and info
- outState.putInt(KEY_AUTH_MESSAGE_VISIBILITY, mAuthMessage.getVisibility());
- outState.putString(KEY_AUTH_MESSAGE_TEXT, mAuthMessage.getText().toString());
+ /// global state
+ outState.putString(KEY_AUTH_TOKEN_TYPE, mAuthTokenType);
+ outState.putLong(KEY_WAITING_FOR_OP_ID, mWaitingForOpId);
+
+ /// Server PRE-fragment state
outState.putInt(KEY_SERVER_STATUS_TEXT, mServerStatusText);
outState.putInt(KEY_SERVER_STATUS_ICON, mServerStatusIcon);
- outState.putBoolean(KEY_SERVER_VALID, mServerIsValid);
outState.putBoolean(KEY_SERVER_CHECKED, mServerIsChecked);
- outState.putBoolean(KEY_SERVER_CHECK_IN_PROGRESS, (!mServerIsValid && mOcServerChkOperation != null));
- outState.putBoolean(KEY_IS_SSL_CONN, mIsSslConn);
- outState.putBoolean(KEY_PASSWORD_VISIBLE, isPasswordVisible());
+ outState.putBoolean(KEY_SERVER_VALID, mServerIsValid);
+ outState.putBoolean(KEY_IS_SSL_CONN, mServerInfo.mIsSslConn);
+ outState.putString(KEY_HOST_URL_TEXT, mServerInfo.mBaseUrl);
+ if (mServerInfo.mVersion != null) {
+ outState.putString(KEY_OC_VERSION, mServerInfo.mVersion.getVersion());
+ }
+ outState.putString(KEY_SERVER_AUTH_METHOD, mServerInfo.mAuthMethod.name());
+
+ /// Authentication PRE-fragment state
+ outState.putBoolean(KEY_PASSWORD_EXPOSED, isPasswordVisible());
outState.putInt(KEY_AUTH_STATUS_ICON, mAuthStatusIcon);
outState.putInt(KEY_AUTH_STATUS_TEXT, mAuthStatusText);
+ outState.putString(KEY_AUTH_TOKEN, mAuthToken);
- /// server data
- if (mDiscoveredVersion != null) {
- outState.putString(KEY_OC_VERSION, mDiscoveredVersion.toString());
- }
- outState.putString(KEY_HOST_URL_TEXT, mHostBaseUrl);
-
- /// account data, if updating
- if (mAccount != null) {
- outState.putParcelable(KEY_ACCOUNT, mAccount);
- }
- outState.putString(AccountAuthenticator.KEY_AUTH_TOKEN_TYPE, mAuthTokenType);
-
- // refresh button enabled
- outState.putBoolean(KEY_REFRESH_BUTTON_ENABLED, (mRefreshButton.getVisibility() == View.VISIBLE));
-
+ /// authentication
+ outState.putBoolean(KEY_AUTH_IS_FIRST_ATTEMPT_TAG, mIsFirstAuthAttempt);
+ //Log_OC.wtf(TAG, "onSaveInstanceState end" );
}
/**
- * The redirection triggered by the OAuth authentication server as response to the GET AUTHORIZATION request
- * is caught here.
+ * The redirection triggered by the OAuth authentication server as response to the
+ * GET AUTHORIZATION request is caught here.
*
- * To make this possible, this activity needs to be qualified with android:launchMode = "singleTask" in the
- * AndroidManifest.xml file.
+ * To make this possible, this activity needs to be qualified with android:launchMode =
+ * "singleTask" in the AndroidManifest.xml file.
*/
@Override
protected void onNewIntent (Intent intent) {
@@ -481,31 +601,55 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
/**
- * The redirection triggered by the OAuth authentication server as response to the GET AUTHORIZATION, and
- * deferred in {@link #onNewIntent(Intent)}, is processed here.
+ * The redirection triggered by the OAuth authentication server as response to the
+ * GET AUTHORIZATION, and deferred in {@link #onNewIntent(Intent)}, is processed here.
*/
@Override
protected void onResume() {
+ //Log_OC.wtf(TAG, "onResume init" );
super.onResume();
- if (mAction == ACTION_UPDATE_TOKEN && mJustCreated && getIntent().getBooleanExtra(EXTRA_ENFORCED_UPDATE, false)) {
- if (MainApp.getAuthTokenTypeAccessToken().equals(mAuthTokenType)) {
- //Toast.makeText(this, R.string.auth_expired_oauth_token_toast, Toast.LENGTH_LONG).show();
- showAuthMessage(getString(R.string.auth_expired_oauth_token_toast));
- } else if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType)) {
- //Toast.makeText(this, R.string.auth_expired_saml_sso_token_toast, Toast.LENGTH_LONG).show();
- showAuthMessage(getString(R.string.auth_expired_saml_sso_token_toast));
- } else {
- //Toast.makeText(this, R.string.auth_expired_basic_auth_toast, Toast.LENGTH_LONG).show();
- showAuthMessage(getString(R.string.auth_expired_basic_auth_toast));
- }
- }
-
+
+ // bound here to avoid spurious changes triggered by Android on device rotations
+ mHostUrlInput.setOnFocusChangeListener(this);
+ mHostUrlInput.addTextChangedListener(mHostUrlInputWatcher);
+
if (mNewCapturedUriFromOAuth2Redirection != null) {
getOAuth2AccessTokenFromCapturedRedirection();
}
-
- mJustCreated = false;
+ if (mOperationsServiceBinder != null) {
+ doOnResumeAndBound();
+ }
+
+ //Log_OC.wtf(TAG, "onResume end" );
+ }
+
+
+ @Override
+ protected void onPause() {
+ //Log_OC.wtf(TAG, "onPause init" );
+ if (mOperationsServiceBinder != null) {
+ //Log_OC.wtf(TAG, "unregistering to listen for operation callbacks" );
+ mOperationsServiceBinder.removeOperationListener(this);
+ }
+
+ mHostUrlInput.removeTextChangedListener(mHostUrlInputWatcher);
+ mHostUrlInput.setOnFocusChangeListener(null);
+
+ super.onPause();
+ //Log_OC.wtf(TAG, "onPause end" );
+ }
+
+ @Override
+ protected void onDestroy() {
+
+ mHostUrlInputWatcher = null;
+
+ if (mOperationsServiceConnection != null) {
+ unbindService(mOperationsServiceConnection);
+ mOperationsServiceBinder = null;
+ }
+ super.onDestroy();
}
@@ -519,16 +663,26 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
mNewCapturedUriFromOAuth2Redirection = null;
/// Showing the dialog with instructions for the user.
- showDialog(DIALOG_OAUTH2_LOGIN_PROGRESS);
+ IndeterminateProgressDialog dialog =
+ IndeterminateProgressDialog.newInstance(R.string.auth_getting_authorization, true);
+ dialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG);
- /// GET ACCESS TOKEN to the oAuth server
- RemoteOperation operation = new OAuth2GetAccessToken( getString(R.string.oauth2_client_id),
- getString(R.string.oauth2_redirect_uri),
- getString(R.string.oauth2_grant_type),
+ /// GET ACCESS TOKEN to the oAuth server
+ Intent getServerInfoIntent = new Intent();
+ getServerInfoIntent.setAction(OperationsService.ACTION_OAUTH2_GET_ACCESS_TOKEN);
+
+ getServerInfoIntent.putExtra(
+ OperationsService.EXTRA_SERVER_URL,
+ mOAuthTokenEndpointText.getText().toString().trim());
+
+ getServerInfoIntent.putExtra(
+ OperationsService.EXTRA_OAUTH2_QUERY_PARAMETERS,
queryParameters);
- //WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(getString(R.string.oauth2_url_endpoint_access)), getApplicationContext());
- WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mOAuthTokenEndpointText.getText().toString().trim()), getApplicationContext(), true);
- operation.execute(client, this, mHandler);
+
+ if (mOperationsServiceBinder != null) {
+ //Log_OC.wtf(TAG, "getting access token..." );
+ mWaitingForOpId = mOperationsServiceBinder.newOperation(getServerInfoIntent);
+ }
}
@@ -542,7 +696,7 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
onUrlInputFocusLost((TextView) view);
}
else {
- hideRefreshButton();
+ showRefreshButton(false);
}
} else if (view.getId() == R.id.account_password) {
@@ -563,36 +717,42 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
* @param hostInput TextView with the URL input field receiving the change of focus.
*/
private void onUrlInputFocusLost(TextView hostInput) {
- if (!mHostBaseUrl.equals(normalizeUrl(mHostUrlInput.getText().toString()))) {
+ if (!mServerInfo.mBaseUrl.equals(
+ normalizeUrl(mHostUrlInput.getText().toString(), mServerInfo.mIsSslConn))) {
+ // check server again only if the user changed something in the field
checkOcServer();
} else {
mOkButton.setEnabled(mServerIsValid);
- if (!mServerIsValid) {
- showRefreshButton();
- }
+ showRefreshButton(!mServerIsValid);
}
}
private void checkOcServer() {
- String uri = trimUrlWebdav(mHostUrlInput.getText().toString().trim());
-
- if (!mHostUrlInputEnabled){
- uri = getString(R.string.server_url);
- }
-
+ String uri = mHostUrlInput.getText().toString().trim();
mServerIsValid = false;
mServerIsChecked = false;
mOkButton.setEnabled(false);
- mDiscoveredVersion = null;
- hideRefreshButton();
+ mServerInfo = new GetServerInfoOperation.ServerInfo();
+ showRefreshButton(false);
+
if (uri.length() != 0) {
mServerStatusText = R.string.auth_testing_connection;
mServerStatusIcon = R.drawable.progress_small;
showServerStatus();
- mOcServerChkOperation = new OwnCloudServerCheckOperation(uri, this);
- WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(uri), this, true);
- mOperationThread = mOcServerChkOperation.execute(client, this, mHandler);
+
+ Intent getServerInfoIntent = new Intent();
+ getServerInfoIntent.setAction(OperationsService.ACTION_GET_SERVER_INFO);
+ getServerInfoIntent.putExtra(
+ OperationsService.EXTRA_SERVER_URL,
+ normalizeUrlSuffix(uri)
+ );
+ if (mOperationsServiceBinder != null) {
+ mWaitingForOpId = mOperationsServiceBinder.newOperation(getServerInfoIntent);
+ } else {
+ Log_OC.wtf(TAG, "Server check tried with OperationService unbound!" );
+ }
+
} else {
mServerStatusText = 0;
mServerStatusIcon = 0;
@@ -622,49 +782,35 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
private void showViewPasswordButton() {
- //int drawable = android.R.drawable.ic_menu_view;
int drawable = R.drawable.ic_view;
if (isPasswordVisible()) {
- //drawable = android.R.drawable.ic_secure;
drawable = R.drawable.ic_hide;
}
mPasswordInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, drawable, 0);
}
private boolean isPasswordVisible() {
- return ((mPasswordInput.getInputType() & InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
+ return ((mPasswordInput.getInputType() & InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) ==
+ InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
}
-
+
private void hidePasswordButton() {
mPasswordInput.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
}
private void showPassword() {
- mPasswordInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
+ mPasswordInput.setInputType(
+ InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
+ );
showViewPasswordButton();
}
-
+
private void hidePassword() {
- mPasswordInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
+ mPasswordInput.setInputType(
+ InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD
+ );
showViewPasswordButton();
}
-
-
- /**
- * Cancels the authenticator activity
- *
- * IMPORTANT ENTRY POINT 3: Never underestimate the importance of cancellation
- *
- * This method is bound in the layout/acceoun_setup.xml resource file.
- *
- * @param view Cancel button
- */
- public void onCancelClick(View view) {
- setResult(RESULT_CANCELED); // TODO review how is this related to AccountAuthenticator (debugging)
- finish();
- }
-
-
/**
* Checks the credentials of the user in the root of the ownCloud server
@@ -682,18 +828,25 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
*/
public void onOkClick(View view) {
// this check should be unnecessary
- if (mDiscoveredVersion == null || !mDiscoveredVersion.isVersionValid() || mHostBaseUrl == null || mHostBaseUrl.length() == 0) {
+ if (mServerInfo.mVersion == null ||
+ !mServerInfo.mVersion.isVersionValid() ||
+ mServerInfo.mBaseUrl == null ||
+ mServerInfo.mBaseUrl.length() == 0) {
mServerStatusIcon = R.drawable.common_error;
mServerStatusText = R.string.auth_wtf_reenter_URL;
showServerStatus();
mOkButton.setEnabled(false);
- Log_OC.wtf(TAG, "The user was allowed to click 'connect' to an unchecked server!!");
+ //Log_OC.wtf(TAG, "The user was allowed to click 'connect' to an unchecked server!!");
return;
}
- if (MainApp.getAuthTokenTypeAccessToken().equals(mAuthTokenType)) {
+ if (AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType()).
+ equals(mAuthTokenType)) {
+
startOauthorization();
- } else if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType)) {
+ } else if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).
+ equals(mAuthTokenType)) {
+
startSamlBasedFederatedSingleSignOnAuthorization();
} else {
checkBasicAuthorization();
@@ -706,23 +859,34 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
* the root folder of the ownCloud server.
*/
private void checkBasicAuthorization() {
- /// get the path to the root folder through WebDAV from the version server
- String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
-
/// get basic credentials entered by user
String username = mUsernameInput.getText().toString();
String password = mPasswordInput.getText().toString();
/// be gentle with the user
- showDialog(DIALOG_LOGIN_PROGRESS);
+ IndeterminateProgressDialog dialog =
+ IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login, true);
+ dialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG);
- /// test credentials accessing the root folder
- mAuthCheckOperation = new ExistenceCheckOperation("", this, false);
- WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);
- client.setBasicCredentials(username, password);
- mOperationThread = mAuthCheckOperation.execute(client, this, mHandler);
+ /// validate credentials accessing the root folder
+ accessRootFolderRemoteOperation(username, password);
+
}
+ private void accessRootFolderRemoteOperation(String username, String password) {
+ Intent existenceCheckIntent = new Intent();
+ existenceCheckIntent.setAction(OperationsService.ACTION_EXISTENCE_CHECK);
+ existenceCheckIntent.putExtra(OperationsService.EXTRA_SERVER_URL, mServerInfo.mBaseUrl);
+ existenceCheckIntent.putExtra(OperationsService.EXTRA_REMOTE_PATH, "/");
+ existenceCheckIntent.putExtra(OperationsService.EXTRA_USERNAME, username);
+ existenceCheckIntent.putExtra(OperationsService.EXTRA_PASSWORD, password);
+ existenceCheckIntent.putExtra(OperationsService.EXTRA_AUTH_TOKEN, mAuthToken);
+
+ if (mOperationsServiceBinder != null) {
+ //Log_OC.wtf(TAG, "starting existenceCheckRemoteOperation..." );
+ mWaitingForOpId = mOperationsServiceBinder.newOperation(existenceCheckIntent);
+ }
+ }
/**
* Starts the OAuth 'grant type' flow to get an access token, with
@@ -733,17 +897,22 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
mAuthStatusIcon = R.drawable.progress_small;
mAuthStatusText = R.string.oauth_login_connection;
showAuthStatus();
-
// GET AUTHORIZATION request
- //Uri uri = Uri.parse(getString(R.string.oauth2_url_endpoint_auth));
Uri uri = Uri.parse(mOAuthAuthEndpointText.getText().toString().trim());
Uri.Builder uriBuilder = uri.buildUpon();
- uriBuilder.appendQueryParameter(OAuth2Constants.KEY_RESPONSE_TYPE, getString(R.string.oauth2_response_type));
- uriBuilder.appendQueryParameter(OAuth2Constants.KEY_REDIRECT_URI, getString(R.string.oauth2_redirect_uri));
- uriBuilder.appendQueryParameter(OAuth2Constants.KEY_CLIENT_ID, getString(R.string.oauth2_client_id));
- uriBuilder.appendQueryParameter(OAuth2Constants.KEY_SCOPE, getString(R.string.oauth2_scope));
- //uriBuilder.appendQueryParameter(OAuth2Constants.KEY_STATE, whateverwewant);
+ uriBuilder.appendQueryParameter(
+ OAuth2Constants.KEY_RESPONSE_TYPE, getString(R.string.oauth2_response_type)
+ );
+ uriBuilder.appendQueryParameter(
+ OAuth2Constants.KEY_REDIRECT_URI, getString(R.string.oauth2_redirect_uri)
+ );
+ uriBuilder.appendQueryParameter(
+ OAuth2Constants.KEY_CLIENT_ID, getString(R.string.oauth2_client_id)
+ );
+ uriBuilder.appendQueryParameter(
+ OAuth2Constants.KEY_SCOPE, getString(R.string.oauth2_scope)
+ );
uri = uriBuilder.build();
Log_OC.d(TAG, "Starting browser to view " + uri.toString());
Intent i = new Intent(Intent.ACTION_VIEW, uri);
@@ -760,16 +929,13 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
mAuthStatusIcon = R.drawable.progress_small;
mAuthStatusText = R.string.auth_connecting_auth_server;
showAuthStatus();
- showDialog(DIALOG_LOGIN_PROGRESS);
-
- /// get the path to the root folder through WebDAV from the version server
- String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
+ IndeterminateProgressDialog dialog =
+ IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login, true);
+ dialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG);
+
+ /// validate credentials accessing the root folder
+ accessRootFolderRemoteOperation("", "");
- /// test credentials accessing the root folder
- mAuthCheckOperation = new ExistenceCheckOperation("", this, false);
- WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, false);
- mOperationThread = mAuthCheckOperation.execute(client, this, mHandler);
-
}
/**
@@ -780,46 +946,91 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
@Override
public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
- if (operation instanceof OwnCloudServerCheckOperation) {
- onOcServerCheckFinish((OwnCloudServerCheckOperation) operation, result);
+ if (operation instanceof GetServerInfoOperation) {
+ if (operation.hashCode() == mWaitingForOpId) {
+ onGetServerInfoFinish(result);
+ } // else nothing ; only the last check operation is considered;
+ // multiple can be started if the user amends a URL quickly
} else if (operation instanceof OAuth2GetAccessToken) {
- onGetOAuthAccessTokenFinish((OAuth2GetAccessToken)operation, result);
+ onGetOAuthAccessTokenFinish(result);
+
+ } else if (operation instanceof ExistenceCheckRemoteOperation) {
+ //Log_OC.wtf(TAG, "received detection response through callback" );
+ if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).
+ equals(mAuthTokenType)) {
+ onSamlBasedFederatedSingleSignOnAuthorizationStart(result);
- } else if (operation instanceof ExistenceCheckOperation) {
- if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType)) {
- onSamlBasedFederatedSingleSignOnAuthorizationStart(operation, result);
-
} else {
- onAuthorizationCheckFinish((ExistenceCheckOperation)operation, result);
+ onAuthorizationCheckFinish(result);
}
+ } else if (operation instanceof GetRemoteUserNameOperation) {
+ onGetUserNameFinish(result);
}
+
}
-
-
- private void onSamlBasedFederatedSingleSignOnAuthorizationStart(RemoteOperation operation, RemoteOperationResult result) {
- try {
- dismissDialog(DIALOG_LOGIN_PROGRESS);
- } catch (IllegalArgumentException e) {
- // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens
+
+ private void onGetUserNameFinish(RemoteOperationResult result) {
+ mWaitingForOpId = Long.MAX_VALUE;
+ if (result.isSuccess()) {
+ boolean success = false;
+ String username = (String) result.getData().get(0);
+
+ if ( mAction == ACTION_CREATE) {
+ mUsernameInput.setText(username);
+ success = createAccount();
+ } else {
+
+ if (!mUsernameInput.getText().toString().equals(username)) {
+ // fail - not a new account, but an existing one; disallow
+ result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME);
+ /*
+ OwnCloudClientManagerFactory.getDefaultSingleton().removeClientFor(
+ new OwnCloudAccount(
+ Uri.parse(mServerInfo.mBaseUrl),
+ OwnCloudCredentialsFactory.newSamlSsoCredentials(mAuthToken))
+ );
+ */
+ mAuthToken = "";
+ updateAuthStatusIconAndText(result);
+ showAuthStatus();
+ Log_OC.d(TAG, result.getLogMessage());
+ } else {
+ updateToken();
+ success = true;
+ }
+ }
+
+ if (success)
+ finish();
+ } else {
+ updateStatusIconFailUserName();
+ showAuthStatus();
+ Log_OC.e(TAG, "Access to user name failed: " + result.getLogMessage());
}
-
- //if (result.isTemporalRedirection() && result.isIdPRedirection()) {
+
+ }
+
+ private void onSamlBasedFederatedSingleSignOnAuthorizationStart(RemoteOperationResult result) {
+ mWaitingForOpId = Long.MAX_VALUE;
+ dismissDialog(WAIT_DIALOG_TAG);
+
if (result.isIdPRedirection()) {
String url = result.getRedirectedLocation();
- String targetUrl = mHostBaseUrl + AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
-
+ String targetUrl = mServerInfo.mBaseUrl
+ + AccountUtils.getWebdavPath(mServerInfo.mVersion, mAuthTokenType);
+
// Show dialog
- mSamlDialog = SamlWebViewDialog.newInstance(url, targetUrl);
- mSamlDialog.show(getSupportFragmentManager(), TAG_SAML_DIALOG);
-
+ SamlWebViewDialog dialog = SamlWebViewDialog.newInstance(url, targetUrl);
+ dialog.show(getSupportFragmentManager(), SAML_DIALOG_TAG);
+
mAuthStatusIcon = 0;
mAuthStatusText = 0;
-
+
} else {
mAuthStatusIcon = R.drawable.common_error;
mAuthStatusText = R.string.auth_unsupported_auth_method;
-
+
}
showAuthStatus();
}
@@ -832,65 +1043,91 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
* @param operation Server check performed.
* @param result Result of the check.
*/
- private void onOcServerCheckFinish(OwnCloudServerCheckOperation operation, RemoteOperationResult result) {
- if (operation.equals(mOcServerChkOperation)) {
- /// save result state
- mServerIsChecked = true;
- mServerIsValid = result.isSuccess();
- mIsSslConn = (result.getCode() == ResultCode.OK_SSL);
- mOcServerChkOperation = null;
+ private void onGetServerInfoFinish(RemoteOperationResult result) {
+ /// update activity state
+ mServerIsChecked = true;
+ mWaitingForOpId = Long.MAX_VALUE;
+
+ // update server status, but don't show it yet
+ updateServerStatusIconAndText(result);
+
+ if (result.isSuccess()) {
+ /// SUCCESS means:
+ // 1. connection succeeded, and we know if it's SSL or not
+ // 2. server is installed
+ // 3. we got the server version
+ // 4. we got the authentication method required by the server
+ mServerInfo = (GetServerInfoOperation.ServerInfo) (result.getData().get(0));
+
+ if (!authSupported(mServerInfo.mAuthMethod)) {
+
+ updateServerStatusIconNoRegularAuth(); // overrides updateServerStatusIconAndText()
+ mServerIsValid = false;
- /// update status icon and text
- if (mServerIsValid) {
- hideRefreshButton();
} else {
- showRefreshButton();
+ mServerIsValid = true;
}
- updateServerStatusIconAndText(result);
- showServerStatus();
+
+ } else {
+ mServerIsValid = false;
+ }
- /// very special case (TODO: move to a common place for all the remote operations)
- if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) {
- mLastSslUntrustedServerResult = result;
- showDialog(DIALOG_SSL_VALIDATOR);
- }
-
- /// retrieve discovered version and normalize server URL
- mDiscoveredVersion = operation.getDiscoveredVersion();
- mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString());
-
- /// allow or not the user try to access the server
- mOkButton.setEnabled(mServerIsValid);
-
- } // else nothing ; only the last check operation is considered;
- // multiple can be triggered if the user amends a URL before a previous check can be triggered
+ // refresh UI
+ showRefreshButton(!mServerIsValid);
+ showServerStatus();
+ mOkButton.setEnabled(mServerIsValid);
+
+ /// very special case (TODO: move to a common place for all the remote operations)
+ if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) {
+ showUntrustedCertDialog(result);
+ }
}
- private String normalizeUrl(String url) {
+ private boolean authSupported(AuthenticationMethod authMethod) {
+ String basic = AccountTypeUtils.getAuthTokenTypePass(MainApp.getAccountType());
+ String oAuth = AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType());
+ String saml = AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType());
+
+ return (( mAuthTokenType.equals(basic) &&
+ authMethod.equals(AuthenticationMethod.BASIC_HTTP_AUTH) ) ||
+ ( mAuthTokenType.equals(oAuth) &&
+ authMethod.equals(AuthenticationMethod.BEARER_TOKEN)) ||
+ ( mAuthTokenType.equals(saml) &&
+ authMethod.equals(AuthenticationMethod.SAML_WEB_SSO))
+ );
+ }
+
+
+ // TODO remove, if possible
+ private String normalizeUrl(String url, boolean sslWhenUnprefixed) {
if (url != null && url.length() > 0) {
url = url.trim();
if (!url.toLowerCase().startsWith("http://") &&
!url.toLowerCase().startsWith("https://")) {
- if (mIsSslConn) {
+ if (sslWhenUnprefixed) {
url = "https://" + url;
} else {
url = "http://" + url;
}
}
-
- // OC-208: Add suffix remote.php/webdav to normalize (OC-34)
- url = trimUrlWebdav(url);
-
- if (url.endsWith("/")) {
- url = url.substring(0, url.length() - 1);
- }
-
+
+ url = normalizeUrlSuffix(url);
}
return (url != null ? url : "");
}
+
+
+ private String normalizeUrlSuffix(String url) {
+ if (url.endsWith("/")) {
+ url = url.substring(0, url.length() - 1);
+ }
+ url = trimUrlWebdav(url);
+ return url;
+ }
+ // TODO remove, if possible
private String trimUrlWebdav(String url){
if(url.toLowerCase().endsWith(AccountUtils.WEBDAV_PATH_4_0)){
url = url.substring(0, url.length() - AccountUtils.WEBDAV_PATH_4_0.length());
@@ -901,8 +1138,8 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
}
return (url != null ? url : "");
}
-
-
+
+
/**
* Chooses the right icon and text to show to the user for the received operation result.
*
@@ -973,6 +1210,10 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
case UNKNOWN_ERROR:
mServerStatusText = R.string.auth_unknown_error_title;
break;
+ case OK_REDIRECT_TO_NON_SECURE_CONNECTION:
+ mServerStatusIcon = android.R.drawable.ic_partial_secure;
+ mServerStatusText = R.string.auth_redirect_non_secure_connection_title;
+ break;
default:
mServerStatusText = 0;
mServerStatusIcon = 0;
@@ -1063,32 +1304,39 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
}
+ private void updateStatusIconFailUserName(){
+ mAuthStatusIcon = R.drawable.common_error;
+ mAuthStatusText = R.string.auth_fail_get_user_name;
+ }
+
+ private void updateServerStatusIconNoRegularAuth(){
+ mServerStatusIcon = R.drawable.common_error;
+ mServerStatusText = R.string.auth_can_not_auth_against_server;
+ }
+
/**
* Processes the result of the request for and access token send
* to an OAuth authorization server.
*
- * @param operation Operation performed requesting the access token.
* @param result Result of the operation.
*/
- private void onGetOAuthAccessTokenFinish(OAuth2GetAccessToken operation, RemoteOperationResult result) {
- try {
- dismissDialog(DIALOG_OAUTH2_LOGIN_PROGRESS);
- } catch (IllegalArgumentException e) {
- // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens
- }
+ private void onGetOAuthAccessTokenFinish(RemoteOperationResult result) {
+ mWaitingForOpId = Long.MAX_VALUE;
+ dismissDialog(WAIT_DIALOG_TAG);
- String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);
- if (result.isSuccess() && webdav_path != null) {
+ if (result.isSuccess()) {
/// be gentle with the user
- showDialog(DIALOG_LOGIN_PROGRESS);
+ IndeterminateProgressDialog dialog =
+ IndeterminateProgressDialog.newInstance(R.string.auth_trying_to_login, true);
+ dialog.show(getSupportFragmentManager(), WAIT_DIALOG_TAG);
/// time to test the retrieved access token on the ownCloud server
- mAuthToken = ((OAuth2GetAccessToken)operation).getResultTokenMap().get(OAuth2Constants.KEY_ACCESS_TOKEN);
+ @SuppressWarnings("unchecked")
+ Map tokens = (Map)(result.getData().get(0));
+ mAuthToken = tokens.get(OAuth2Constants.KEY_ACCESS_TOKEN);
Log_OC.d(TAG, "Got ACCESS TOKEN: " + mAuthToken);
- mAuthCheckOperation = new ExistenceCheckOperation("", this, false);
- WebdavClient client = OwnCloudClientUtils.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);
- client.setBearerCredentials(mAuthToken);
- mAuthCheckOperation.execute(client, this, mHandler);
+
+ accessRootFolderRemoteOperation("", "");
} else {
updateAuthStatusIconAndText(result);
@@ -1106,12 +1354,9 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
* @param operation Access check performed.
* @param result Result of the operation.
*/
- private void onAuthorizationCheckFinish(ExistenceCheckOperation operation, RemoteOperationResult result) {
- try {
- dismissDialog(DIALOG_LOGIN_PROGRESS);
- } catch (IllegalArgumentException e) {
- // NOTHING TO DO ; can't find out what situation that leads to the exception in this code, but user logs signal that it happens
- }
+ private void onAuthorizationCheckFinish(RemoteOperationResult result) {
+ mWaitingForOpId = Long.MAX_VALUE;
+ dismissDialog(WAIT_DIALOG_TAG);
if (result.isSuccess()) {
Log_OC.d(TAG, "Successful access - time to save the account");
@@ -1121,21 +1366,20 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
success = createAccount();
} else {
- success = updateToken();
+ updateToken();
+ success = true;
}
if (success) {
finish();
}
-
- } else if (result.isServerFail() || result.isException()) {
- /// if server fail or exception in authorization, the UI is updated as when a server check failed
+
+ } else if (result.isServerFail() || result.isException()) {
+ /// server errors or exceptions in authorization take to requiring a new check of
+ /// the server
mServerIsChecked = true;
mServerIsValid = false;
- mIsSslConn = false;
- mOcServerChkOperation = null;
- mDiscoveredVersion = null;
- mHostBaseUrl = normalizeUrl(mHostUrlInput.getText().toString());
+ mServerInfo = new GetServerInfoOperation.ServerInfo();
// update status icon and text
updateServerStatusIconAndText(result);
@@ -1143,15 +1387,14 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
mAuthStatusIcon = 0;
mAuthStatusText = 0;
showAuthStatus();
-
+
// update input controls state
- showRefreshButton();
+ showRefreshButton(true);
mOkButton.setEnabled(false);
- // very special case (TODO: move to a common place for all the remote operations) (dangerous here?)
+ // very special case (TODO: move to a common place for all the remote operations)
if (result.getCode() == ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED) {
- mLastSslUntrustedServerResult = result;
- showDialog(DIALOG_SSL_VALIDATOR);
+ showUntrustedCertDialog(result);
}
} else { // authorization fail due to client side - probably wrong credentials
@@ -1159,47 +1402,41 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
showAuthStatus();
Log_OC.d(TAG, "Access failed: " + result.getLogMessage());
}
-
}
+
+
/**
- * Sets the proper response to get that the Account Authenticator that started this activity saves
- * a new authorization token for mAccount.
+ * Sets the proper response to get that the Account Authenticator that started this activity
+ * saves a new authorization token for mAccount.
*/
- private boolean updateToken() {
+ private void updateToken() {
Bundle response = new Bundle();
response.putString(AccountManager.KEY_ACCOUNT_NAME, mAccount.name);
response.putString(AccountManager.KEY_ACCOUNT_TYPE, mAccount.type);
-
- if (MainApp.getAuthTokenTypeAccessToken().equals(mAuthTokenType)) {
+
+ if (AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType()).
+ equals(mAuthTokenType)) {
response.putString(AccountManager.KEY_AUTHTOKEN, mAuthToken);
- // the next line is necessary; by now, notifications are calling directly to the AuthenticatorActivity to update, without AccountManager intervention
+ // the next line is necessary, notifications are calling directly to the
+ // AuthenticatorActivity to update, without AccountManager intervention
mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);
-
- } else if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType)) {
- String username = getUserNameForSamlSso();
- if (!mUsernameInput.getText().toString().equals(username)) {
- // fail - not a new account, but an existing one; disallow
- RemoteOperationResult result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_THE_SAME);
- updateAuthStatusIconAndText(result);
- showAuthStatus();
- Log_OC.d(TAG, result.getLogMessage());
-
- return false;
- }
-
+
+ } else if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).
+ equals(mAuthTokenType)) {
+
response.putString(AccountManager.KEY_AUTHTOKEN, mAuthToken);
- // the next line is necessary; by now, notifications are calling directly to the AuthenticatorActivity to update, without AccountManager intervention
+ // the next line is necessary; by now, notifications are calling directly to the
+ // AuthenticatorActivity to update, without AccountManager intervention
mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);
-
+
} else {
response.putString(AccountManager.KEY_AUTHTOKEN, mPasswordInput.getText().toString());
mAccountMgr.setPassword(mAccount, mPasswordInput.getText().toString());
}
setAccountAuthenticatorResult(response);
-
- return true;
+
}
@@ -1212,38 +1449,39 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
*/
private boolean createAccount() {
/// create and save new ownCloud account
- boolean isOAuth = MainApp.getAuthTokenTypeAccessToken().equals(mAuthTokenType);
- boolean isSaml = MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType);
+ boolean isOAuth = AccountTypeUtils.
+ getAuthTokenTypeAccessToken(MainApp.getAccountType()).equals(mAuthTokenType);
+ boolean isSaml = AccountTypeUtils.
+ getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).equals(mAuthTokenType);
- Uri uri = Uri.parse(mHostBaseUrl);
+ Uri uri = Uri.parse(mServerInfo.mBaseUrl);
String username = mUsernameInput.getText().toString().trim();
- if (isSaml) {
- username = getUserNameForSamlSso();
-
- } else if (isOAuth) {
+ if (isOAuth) {
username = "OAuth_user" + (new java.util.Random(System.currentTimeMillis())).nextLong();
- }
- String accountName = username + "@" + uri.getHost();
- if (uri.getPort() >= 0) {
- accountName += ":" + uri.getPort();
}
- mAccount = new Account(accountName, MainApp.getAccountType());
- if (AccountUtils.exists(mAccount, getApplicationContext())) {
+ String accountName = com.owncloud.android.lib.common.accounts.AccountUtils.
+ buildAccountName(uri, username);
+ Account newAccount = new Account(accountName, MainApp.getAccountType());
+ if (AccountUtils.exists(newAccount, getApplicationContext())) {
// fail - not a new account, but an existing one; disallow
RemoteOperationResult result = new RemoteOperationResult(ResultCode.ACCOUNT_NOT_NEW);
updateAuthStatusIconAndText(result);
showAuthStatus();
Log_OC.d(TAG, result.getLogMessage());
return false;
-
+
} else {
-
+ mAccount = newAccount;
+
if (isOAuth || isSaml) {
- mAccountMgr.addAccountExplicitly(mAccount, "", null); // with external authorizations, the password is never input in the app
+ // with external authorizations, the password is never input in the app
+ mAccountMgr.addAccountExplicitly(mAccount, "", null);
} else {
- mAccountMgr.addAccountExplicitly(mAccount, mPasswordInput.getText().toString(), null);
+ mAccountMgr.addAccountExplicitly(
+ mAccount, mPasswordInput.getText().toString(), null
+ );
}
-
+
/// add the new account as default in preferences, if there is none already
Account defaultAccount = AccountUtils.getCurrentOwnCloudAccount(this);
if (defaultAccount == null) {
@@ -1252,9 +1490,10 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
editor.putString("select_oc_account", accountName);
editor.commit();
}
-
+
/// prepare result to return to the Authenticator
- // TODO check again what the Authenticator makes with it; probably has the same effect as addAccountExplicitly, but it's not well done
+ // TODO check again what the Authenticator makes with it; probably has the same
+ // effect as addAccountExplicitly, but it's not well done
final Intent intent = new Intent();
intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, MainApp.getAccountType());
intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, mAccount.name);
@@ -1264,129 +1503,28 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
if (isOAuth || isSaml) {
mAccountMgr.setAuthToken(mAccount, mAuthTokenType, mAuthToken);
}
- /// add user data to the new account; TODO probably can be done in the last parameter addAccountExplicitly, or in KEY_USERDATA
- mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION, mDiscoveredVersion.toString());
- mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL, mHostBaseUrl);
+ /// add user data to the new account; TODO probably can be done in the last parameter
+ // addAccountExplicitly, or in KEY_USERDATA
+ mAccountMgr.setUserData(
+ mAccount, Constants.KEY_OC_VERSION, mServerInfo.mVersion.getVersion()
+ );
+ mAccountMgr.setUserData(
+ mAccount, Constants.KEY_OC_BASE_URL, mServerInfo.mBaseUrl
+ );
+
if (isSaml) {
- mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO, "TRUE");
+ mAccountMgr.setUserData(mAccount, Constants.KEY_SUPPORTS_SAML_WEB_SSO, "TRUE");
} else if (isOAuth) {
- mAccountMgr.setUserData(mAccount, AccountAuthenticator.KEY_SUPPORTS_OAUTH2, "TRUE");
+ mAccountMgr.setUserData(mAccount, Constants.KEY_SUPPORTS_OAUTH2, "TRUE");
}
-
+
setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent);
-
+
return true;
}
}
-
- private String getUserNameForSamlSso() {
- if (mAuthToken != null) {
- String [] cookies = mAuthToken.split(";");
- for (int i=0; i 0) {
+ public void onSsoFinished(String sessionCookie) {
+ if (sessionCookie != null && sessionCookie.length() > 0) {
Log_OC.d(TAG, "Successful SSO - time to save the account");
- onSamlDialogSuccess(sessionCookies);
- Fragment fd = getSupportFragmentManager().findFragmentByTag(TAG_SAML_DIALOG);
+ mAuthToken = sessionCookie;
+ getRemoteUserNameOperation(sessionCookie, true);
+ Fragment fd = getSupportFragmentManager().findFragmentByTag(SAML_DIALOG_TAG);
if (fd != null && fd instanceof SherlockDialogFragment) {
Dialog d = ((SherlockDialogFragment)fd).getDialog();
if (d != null && d.isShowing()) {
@@ -1629,28 +1723,169 @@ implements OnRemoteOperationListener, OnSslValidatorListener, OnFocusChangeList
// TODO - show fail
Log_OC.d(TAG, "SSO failed");
}
-
- }
-
- /** Show auth_message
- *
- * @param message
- */
- private void showAuthMessage(String message) {
- mAuthMessage.setVisibility(View.VISIBLE);
- mAuthMessage.setText(message);
- }
-
- private void hideAuthMessage() {
- mAuthMessage.setVisibility(View.GONE);
+
}
@Override
public boolean onTouchEvent(MotionEvent event) {
- if (MainApp.getAuthTokenTypeSamlSessionCookie().equals(mAuthTokenType) &&
+ if (AccountTypeUtils.getAuthTokenTypeSamlSessionCookie(MainApp.getAccountType()).
+ equals(mAuthTokenType) &&
mHostUrlInput.hasFocus() && event.getAction() == MotionEvent.ACTION_DOWN) {
checkOcServer();
}
return super.onTouchEvent(event);
}
+
+
+ /**
+ * Show untrusted cert dialog
+ */
+ public void showUntrustedCertDialog(
+ X509Certificate x509Certificate, SslError error, SslErrorHandler handler
+ ) {
+ // Show a dialog with the certificate info
+ SslUntrustedCertDialog dialog = null;
+ if (x509Certificate == null) {
+ dialog = SslUntrustedCertDialog.newInstanceForEmptySslError(error, handler);
+ } else {
+ dialog = SslUntrustedCertDialog.
+ newInstanceForFullSslError(x509Certificate, error, handler);
+ }
+ FragmentManager fm = getSupportFragmentManager();
+ FragmentTransaction ft = fm.beginTransaction();
+ ft.addToBackStack(null);
+ dialog.show(ft, UNTRUSTED_CERT_DIALOG_TAG);
+ }
+
+
+ /**
+ * Show untrusted cert dialog
+ */
+ private void showUntrustedCertDialog(RemoteOperationResult result) {
+ // Show a dialog with the certificate info
+ SslUntrustedCertDialog dialog = SslUntrustedCertDialog.
+ newInstanceForFullSslError((CertificateCombinedException)result.getException());
+ FragmentManager fm = getSupportFragmentManager();
+ FragmentTransaction ft = fm.beginTransaction();
+ ft.addToBackStack(null);
+ dialog.show(ft, UNTRUSTED_CERT_DIALOG_TAG);
+
+ }
+
+ /**
+ * Called from SslValidatorDialog when a new server certificate was correctly saved.
+ */
+ public void onSavedCertificate() {
+ Fragment fd = getSupportFragmentManager().findFragmentByTag(SAML_DIALOG_TAG);
+ if (fd == null) {
+ // if SAML dialog is not shown,
+ // the SslDialog was shown due to an SSL error in the server check
+ checkOcServer();
+ }
+ }
+
+ /**
+ * Called from SslValidatorDialog when a new server certificate could not be saved
+ * when the user requested it.
+ */
+ @Override
+ public void onFailedSavingCertificate() {
+ dismissDialog(SAML_DIALOG_TAG);
+ Toast.makeText(this, R.string.ssl_validator_not_saved, Toast.LENGTH_LONG).show();
+ }
+
+ @Override
+ public void onCancelCertificate() {
+ dismissDialog(SAML_DIALOG_TAG);
+ }
+
+
+ private void doOnResumeAndBound() {
+ //Log_OC.wtf(TAG, "registering to listen for operation callbacks" );
+ mOperationsServiceBinder.addOperationListener(AuthenticatorActivity.this, mHandler);
+ if (mWaitingForOpId <= Integer.MAX_VALUE) {
+ mOperationsServiceBinder.dispatchResultIfFinished((int)mWaitingForOpId, this);
+ }
+
+ if (mPendingAutoCheck) {
+ checkOcServer();
+ }
+ }
+
+
+ private void dismissDialog(String dialogTag){
+ Fragment frag = getSupportFragmentManager().findFragmentByTag(dialogTag);
+ if (frag != null && frag instanceof SherlockDialogFragment) {
+ SherlockDialogFragment dialog = (SherlockDialogFragment) frag;
+ dialog.dismiss();
+ }
+ }
+
+
+ /**
+ * Implements callback methods for service binding.
+ */
+ private class OperationsServiceConnection implements ServiceConnection {
+
+ @Override
+ public void onServiceConnected(ComponentName component, IBinder service) {
+ if (component.equals(
+ new ComponentName(AuthenticatorActivity.this, OperationsService.class)
+ )) {
+ //Log_OC.wtf(TAG, "Operations service connected");
+ mOperationsServiceBinder = (OperationsServiceBinder) service;
+
+ doOnResumeAndBound();
+
+ } else {
+ return;
+ }
+
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName component) {
+ if (component.equals(
+ new ComponentName(AuthenticatorActivity.this, OperationsService.class)
+ )) {
+ Log_OC.e(TAG, "Operations service crashed");
+ mOperationsServiceBinder = null;
+ }
+ }
+
+ }
+
+ /**
+ * Create and show dialog for request authentication to the user
+ * @param webView
+ * @param handler
+ */
+ public void createAuthenticationDialog(WebView webView, HttpAuthHandler handler) {
+
+ // Show a dialog with the certificate info
+ CredentialsDialogFragment dialog =
+ CredentialsDialogFragment.newInstanceForCredentials(webView, handler);
+ FragmentManager fm = getSupportFragmentManager();
+ FragmentTransaction ft = fm.beginTransaction();
+ ft.addToBackStack(null);
+ dialog.setCancelable(false);
+ dialog.show(ft, CREDENTIALS_DIALOG_TAG);
+
+ if (!mIsFirstAuthAttempt) {
+ Toast.makeText(
+ getApplicationContext(),
+ getText(R.string.saml_authentication_wrong_pass),
+ Toast.LENGTH_LONG
+ ).show();
+ } else {
+ mIsFirstAuthAttempt = false;
+ }
+ }
+
+ /**
+ * For retrieving the clicking on authentication cancel button
+ */
+ public void doNegativeAuthenticatioDialogClick(){
+ mIsFirstAuthAttempt = true;
+ }
}
diff --git a/src/com/owncloud/android/authentication/SsoWebViewClient.java b/src/com/owncloud/android/authentication/SsoWebViewClient.java
index 5c97931e98..b90ab85bd7 100644
--- a/src/com/owncloud/android/authentication/SsoWebViewClient.java
+++ b/src/com/owncloud/android/authentication/SsoWebViewClient.java
@@ -17,16 +17,29 @@
package com.owncloud.android.authentication;
+import java.io.ByteArrayInputStream;
import java.lang.ref.WeakReference;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
-import com.owncloud.android.Log_OC;
-
+import com.owncloud.android.lib.common.network.NetworkUtils;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import android.content.Context;
import android.graphics.Bitmap;
+import android.net.http.SslCertificate;
+import android.net.http.SslError;
+import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.view.KeyEvent;
import android.view.View;
import android.webkit.CookieManager;
+import android.webkit.HttpAuthHandler;
+import android.webkit.SslErrorHandler;
+import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@@ -48,12 +61,15 @@ public class SsoWebViewClient extends WebViewClient {
public void onSsoFinished(String sessionCookie);
}
+ private Context mContext;
private Handler mListenerHandler;
private WeakReference mListenerRef;
private String mTargetUrl;
private String mLastReloadedUrlAtError;
+
- public SsoWebViewClient (Handler listenerHandler, SsoWebViewClientListener listener) {
+ public SsoWebViewClient (Context context, Handler listenerHandler, SsoWebViewClientListener listener) {
+ mContext = context;
mListenerHandler = listenerHandler;
mListenerRef = new WeakReference(listener);
mTargetUrl = "fake://url.to.be.set";
@@ -71,6 +87,7 @@ public class SsoWebViewClient extends WebViewClient {
@Override
public void onPageStarted (WebView view, String url, Bitmap favicon) {
Log_OC.d(TAG, "onPageStarted : " + url);
+ view.clearCache(true);
super.onPageStarted(view, url, favicon);
}
@@ -107,7 +124,7 @@ public class SsoWebViewClient extends WebViewClient {
view.setVisibility(View.GONE);
CookieManager cookieManager = CookieManager.getInstance();
final String cookies = cookieManager.getCookie(url);
- //Log_OC.d(TAG, "Cookies: " + cookies);
+ Log_OC.d(TAG, "Cookies: " + cookies);
if (mListenerHandler != null && mListenerRef != null) {
// this is good idea because onPageFinished is not running in the UI thread
mListenerHandler.post(new Runnable() {
@@ -115,29 +132,73 @@ public class SsoWebViewClient extends WebViewClient {
public void run() {
SsoWebViewClientListener listener = mListenerRef.get();
if (listener != null) {
+ // Send Cookies to the listener
listener.onSsoFinished(cookies);
}
}
});
}
- }
-
+ }
}
- /*
+
@Override
public void doUpdateVisitedHistory (WebView view, String url, boolean isReload) {
Log_OC.d(TAG, "doUpdateVisitedHistory : " + url);
}
@Override
- public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
+ public void onReceivedSslError (final WebView view, final SslErrorHandler handler, SslError error) {
Log_OC.d(TAG, "onReceivedSslError : " + error);
+ // Test 1
+ X509Certificate x509Certificate = getX509CertificateFromError(error);
+ boolean isKnownServer = false;
+
+ if (x509Certificate != null) {
+ Log_OC.d(TAG, "------>>>>> x509Certificate " + x509Certificate.toString());
+
+ try {
+ isKnownServer = NetworkUtils.isCertInKnownServersStore((Certificate) x509Certificate, mContext);
+ } catch (Exception e) {
+ Log_OC.e(TAG, "Exception: " + e.getMessage());
+ }
+ }
+
+ if (isKnownServer) {
+ handler.proceed();
+ } else {
+ ((AuthenticatorActivity)mContext).showUntrustedCertDialog(x509Certificate, error, handler);
+ }
+ }
+
+ /**
+ * Obtain the X509Certificate from SslError
+ * @param error SslError
+ * @return X509Certificate from error
+ */
+ public X509Certificate getX509CertificateFromError (SslError error) {
+ Bundle bundle = SslCertificate.saveState(error.getCertificate());
+ X509Certificate x509Certificate;
+ byte[] bytes = bundle.getByteArray("x509-certificate");
+ if (bytes == null) {
+ x509Certificate = null;
+ } else {
+ try {
+ CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+ Certificate cert = certFactory.generateCertificate(new ByteArrayInputStream(bytes));
+ x509Certificate = (X509Certificate) cert;
+ } catch (CertificateException e) {
+ x509Certificate = null;
+ }
+ }
+ return x509Certificate;
}
@Override
public void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm) {
Log_OC.d(TAG, "onReceivedHttpAuthRequest : " + host);
+
+ ((AuthenticatorActivity)mContext).createAuthenticationDialog(view, handler);
}
@Override
@@ -172,5 +233,4 @@ public class SsoWebViewClient extends WebViewClient {
Log_OC.d(TAG, "shouldOverrideKeyEvent : " + event);
return false;
}
- */
}
diff --git a/src/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/com/owncloud/android/datamodel/FileDataStorageManager.java
index 0ad985ee2d..5b1bef1b5d 100644
--- a/src/com/owncloud/android/datamodel/FileDataStorageManager.java
+++ b/src/com/owncloud/android/datamodel/FileDataStorageManager.java
@@ -1,6 +1,6 @@
/* ownCloud Android client application
* Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
+ * Copyright (C) 2012-2014 ownCloud Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
@@ -25,9 +25,12 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.Vector;
-import com.owncloud.android.Log_OC;
import com.owncloud.android.MainApp;
import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.utils.FileStorageUtils;
@@ -148,7 +151,7 @@ public class FileDataStorageManager {
public Vector getFolderImages(OCFile folder) {
Vector ret = new Vector();
if (folder != null) {
- // TODO better implementation, filtering in the access to database (if possible) instead of here
+ // TODO better implementation, filtering in the access to database instead of here
Vector tmp = getFolderContent(folder);
OCFile current = null;
for (int i=0; i updatedFiles, Collection filesToRemove) {
+ public void saveFolder(
+ OCFile folder, Collection updatedFiles, Collection filesToRemove
+ ) {
- Log_OC.d(TAG, "Saving folder " + folder.getRemotePath() + " with " + updatedFiles.size() + " children and " + filesToRemove.size() + " files to remove");
+ Log_OC.d(TAG, "Saving folder " + folder.getRemotePath() + " with " + updatedFiles.size()
+ + " children and " + filesToRemove.size() + " files to remove");
- ArrayList operations = new ArrayList(updatedFiles.size());
+ ArrayList operations =
+ new ArrayList(updatedFiles.size());
// prepare operations to insert or update files to save in the given folder
for (OCFile file : updatedFiles) {
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
- cv.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA, file.getModificationTimestampAtLastSyncForData());
+ cv.put(
+ ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
+ file.getModificationTimestampAtLastSyncForData()
+ );
cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype());
@@ -278,6 +296,10 @@ public class FileDataStorageManager {
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, file.getLastSyncDateForData());
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.keepInSync() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
+ cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
+ cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
+ cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
boolean existsByPath = fileExists(file.getRemotePath());
if (existsByPath || fileExists(file.getFileId())) {
@@ -290,29 +312,40 @@ public class FileDataStorageManager {
} else {
// adding a new file
- operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).withValues(cv).build());
+ operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).
+ withValues(cv).build());
}
}
// prepare operations to remove files in the given folder
- String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?";
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
+ ProviderTableMeta.FILE_PATH + "=?";
String [] whereArgs = null;
for (OCFile file : filesToRemove) {
if (file.getParentId() == folder.getFileId()) {
whereArgs = new String[]{mAccount.name, file.getRemotePath()};
//Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, "" + file.getFileId());
if (file.isFolder()) {
- operations.add(ContentProviderOperation
- .newDelete(ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_DIR, file.getFileId())).withSelection(where, whereArgs)
- .build());
- // TODO remove local folder
+ operations.add(ContentProviderOperation.newDelete(
+ ContentUris.withAppendedId(
+ ProviderTableMeta.CONTENT_URI_DIR, file.getFileId()
+ )
+ ).withSelection(where, whereArgs).build());
+
+ File localFolder =
+ new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file));
+ if (localFolder.exists()) {
+ removeLocalFolder(localFolder);
+ }
} else {
- operations.add(ContentProviderOperation
- .newDelete(ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, file.getFileId())).withSelection(where, whereArgs)
- .build());
+ operations.add(ContentProviderOperation.newDelete(
+ ContentUris.withAppendedId(
+ ProviderTableMeta.CONTENT_URI_FILE, file.getFileId()
+ )
+ ).withSelection(where, whereArgs).build());
+
if (file.isDown()) {
new File(file.getStoragePath()).delete();
- // TODO move the deletion of local contents after success of deletions
}
}
}
@@ -321,9 +354,12 @@ public class FileDataStorageManager {
// update metadata of folder
ContentValues cv = new ContentValues();
cv.put(ProviderTableMeta.FILE_MODIFIED, folder.getModificationTimestamp());
- cv.put(ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA, folder.getModificationTimestampAtLastSyncForData());
+ cv.put(
+ ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
+ folder.getModificationTimestampAtLastSyncForData()
+ );
cv.put(ProviderTableMeta.FILE_CREATION, folder.getCreationTimestamp());
- cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, 0); // FileContentProvider calculates the right size
+ cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, 0);
cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, folder.getMimetype());
cv.put(ProviderTableMeta.FILE_NAME, folder.getFileName());
cv.put(ProviderTableMeta.FILE_PARENT, folder.getParentId());
@@ -333,6 +369,11 @@ public class FileDataStorageManager {
cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA, folder.getLastSyncDateForData());
cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, folder.keepInSync() ? 1 : 0);
cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag());
+ cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, folder.isShareByLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink());
+ cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions());
+ cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId());
+
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
withValues(cv).
withSelection( ProviderTableMeta._ID + "=?",
@@ -378,64 +419,72 @@ public class FileDataStorageManager {
}
}
- updateFolderSize(folder.getFileId());
+ //updateFolderSize(folder.getFileId());
}
- /**
- *
- * @param id
- */
- private void updateFolderSize(long id) {
- if (id > FileDataStorageManager.ROOT_PARENT_ID) {
- Log_OC.d(TAG, "Updating size of " + id);
- if (getContentResolver() != null) {
- getContentResolver().update(ProviderTableMeta.CONTENT_URI_DIR,
- new ContentValues(), // won't be used, but cannot be null; crashes in KLP
- ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(id) });
- } else {
- try {
- getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_DIR,
- new ContentValues(), // won't be used, but cannot be null; crashes in KLP
- ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(id) });
-
- } catch (RemoteException e) {
- Log_OC.e(TAG, "Exception in update of folder size through compatibility patch " + e.getMessage());
- }
- }
- } else {
- Log_OC.e(TAG, "not updating size for folder " + id);
- }
- }
+// /**
+// *
+// * @param id
+// */
+// private void updateFolderSize(long id) {
+// if (id > FileDataStorageManager.ROOT_PARENT_ID) {
+// Log_OC.d(TAG, "Updating size of " + id);
+// if (getContentResolver() != null) {
+// getContentResolver().update(ProviderTableMeta.CONTENT_URI_DIR,
+// new ContentValues(),
+ // won't be used, but cannot be null; crashes in KLP
+// ProviderTableMeta._ID + "=?",
+// new String[] { String.valueOf(id) });
+// } else {
+// try {
+// getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_DIR,
+// new ContentValues(),
+ // won't be used, but cannot be null; crashes in KLP
+// ProviderTableMeta._ID + "=?",
+// new String[] { String.valueOf(id) });
+//
+// } catch (RemoteException e) {
+// Log_OC.e(
+// TAG, "Exception in update of folder size through compatibility patch " + e.getMessage());
+// }
+// }
+// } else {
+// Log_OC.e(TAG, "not updating size for folder " + id);
+// }
+// }
- public void removeFile(OCFile file, boolean removeDBData, boolean removeLocalCopy) {
+ public boolean removeFile(OCFile file, boolean removeDBData, boolean removeLocalCopy) {
+ boolean success = true;
if (file != null) {
if (file.isFolder()) {
- removeFolder(file, removeDBData, removeLocalCopy);
+ success = removeFolder(file, removeDBData, removeLocalCopy);
} else {
if (removeDBData) {
- //Uri file_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, ""+file.getFileId());
- Uri file_uri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_FILE, file.getFileId());
- String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?";
+ Uri file_uri = ContentUris.withAppendedId(
+ ProviderTableMeta.CONTENT_URI_FILE,
+ file.getFileId()
+ );
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
+ ProviderTableMeta.FILE_PATH + "=?";
String [] whereArgs = new String[]{mAccount.name, file.getRemotePath()};
+ int deleted = 0;
if (getContentProviderClient() != null) {
try {
- getContentProviderClient().delete(file_uri, where, whereArgs);
+ deleted = getContentProviderClient().delete(file_uri, where, whereArgs);
} catch (RemoteException e) {
e.printStackTrace();
}
} else {
- getContentResolver().delete(file_uri, where, whereArgs);
+ deleted = getContentResolver().delete(file_uri, where, whereArgs);
}
- updateFolderSize(file.getParentId());
+ success &= (deleted > 0);
}
- if (removeLocalCopy && file.isDown()) {
- boolean success = new File(file.getStoragePath()).delete();
+ if (removeLocalCopy && file.isDown() && file.getStoragePath() != null && success) {
+ success = new File(file.getStoragePath()).delete();
if (!removeDBData && success) {
// maybe unnecessary, but should be checked TODO remove if unnecessary
file.setStoragePath(null);
@@ -444,51 +493,86 @@ public class FileDataStorageManager {
}
}
}
+ return success;
}
- public void removeFolder(OCFile folder, boolean removeDBData, boolean removeLocalContent) {
+ public boolean removeFolder(OCFile folder, boolean removeDBData, boolean removeLocalContent) {
+ boolean success = true;
if (folder != null && folder.isFolder()) {
if (removeDBData && folder.getFileId() != -1) {
- removeFolderInDb(folder);
+ success = removeFolderInDb(folder);
}
- if (removeLocalContent) {
- File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder));
- removeLocalFolder(localFolder);
+ if (removeLocalContent && success) {
+ success = removeLocalFolder(folder);
}
}
+ return success;
}
- private void removeFolderInDb(OCFile folder) {
- Uri folder_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, ""+ folder.getFileId()); // URI for recursive deletion
- String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?";
+ private boolean removeFolderInDb(OCFile folder) {
+ Uri folder_uri = Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, "" +
+ folder.getFileId()); // URI for recursive deletion
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?" + " AND " +
+ ProviderTableMeta.FILE_PATH + "=?";
String [] whereArgs = new String[]{mAccount.name, folder.getRemotePath()};
+ int deleted = 0;
if (getContentProviderClient() != null) {
try {
- getContentProviderClient().delete(folder_uri, where, whereArgs);
+ deleted = getContentProviderClient().delete(folder_uri, where, whereArgs);
} catch (RemoteException e) {
e.printStackTrace();
}
} else {
- getContentResolver().delete(folder_uri, where, whereArgs);
+ deleted = getContentResolver().delete(folder_uri, where, whereArgs);
}
- updateFolderSize(folder.getParentId());
+ return deleted > 0;
}
- private void removeLocalFolder(File folder) {
- if (folder.exists()) {
- File[] files = folder.listFiles();
+ private boolean removeLocalFolder(OCFile folder) {
+ boolean success = true;
+ File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder));
+ if (localFolder.exists()) {
+ // stage 1: remove the local files already registered in the files database
+ Vector files = getFolderContent(folder.getFileId());
if (files != null) {
- for (File file : files) {
- if (file.isDirectory()) {
- removeLocalFolder(file);
+ for (OCFile file : files) {
+ if (file.isFolder()) {
+ success &= removeLocalFolder(file);
} else {
- file.delete();
+ if (file.isDown()) {
+ File localFile = new File(file.getStoragePath());
+ success &= localFile.delete();
+ if (success) {
+ file.setStoragePath(null);
+ saveFile(file);
+ }
+ }
}
}
}
- folder.delete();
+
+ // stage 2: remove the folder itself and any local file inside out of sync;
+ // for instance, after clearing the app cache or reinstalling
+ success &= removeLocalFolder(localFolder);
}
+ return success;
+ }
+
+ private boolean removeLocalFolder(File localFolder) {
+ boolean success = true;
+ File[] localFiles = localFolder.listFiles();
+ if (localFiles != null) {
+ for (File localFile : localFiles) {
+ if (localFile.isDirectory()) {
+ success &= removeLocalFolder(localFile);
+ } else {
+ success &= localFile.delete();
+ }
+ }
+ }
+ success &= localFolder.delete();
+ return success;
}
/**
@@ -500,43 +584,67 @@ public class FileDataStorageManager {
public void moveFolder(OCFile folder, String newPath) {
// TODO check newPath
- if (folder != null && folder.isFolder() && folder.fileExists() && !OCFile.ROOT_PATH.equals(folder.getFileName())) {
+ if ( folder != null && folder.isFolder() &&
+ folder.fileExists() && !OCFile.ROOT_PATH.equals(folder.getFileName())
+ ) {
/// 1. get all the descendants of 'dir' in a single QUERY (including 'dir')
Cursor c = null;
if (getContentProviderClient() != null) {
try {
- c = getContentProviderClient().query(ProviderTableMeta.CONTENT_URI,
- null,
- ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ? ",
- new String[] { mAccount.name, folder.getRemotePath() + "%" }, ProviderTableMeta.FILE_PATH + " ASC ");
+ c = getContentProviderClient().query (
+ ProviderTableMeta.CONTENT_URI,
+ null,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + " LIKE ? ",
+ new String[] { mAccount.name, folder.getRemotePath() + "%" },
+ ProviderTableMeta.FILE_PATH + " ASC "
+ );
} catch (RemoteException e) {
Log_OC.e(TAG, e.getMessage());
}
} else {
- c = getContentResolver().query(ProviderTableMeta.CONTENT_URI,
- null,
- ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PATH + " LIKE ? ",
- new String[] { mAccount.name, folder.getRemotePath() + "%" }, ProviderTableMeta.FILE_PATH + " ASC ");
+ c = getContentResolver().query (
+ ProviderTableMeta.CONTENT_URI,
+ null,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + " LIKE ? ",
+ new String[] { mAccount.name, folder.getRemotePath() + "%" },
+ ProviderTableMeta.FILE_PATH + " ASC "
+ );
}
/// 2. prepare a batch of update operations to change all the descendants
- ArrayList operations = new ArrayList(c.getCount());
+ ArrayList operations =
+ new ArrayList(c.getCount());
int lengthOfOldPath = folder.getRemotePath().length();
String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name);
int lengthOfOldStoragePath = defaultSavePath.length() + lengthOfOldPath;
if (c.moveToFirst()) {
do {
- ContentValues cv = new ContentValues(); // don't take the constructor out of the loop and clear the object
+ ContentValues cv = new ContentValues(); // keep the constructor in the loop
OCFile child = createFileInstance(c);
- cv.put(ProviderTableMeta.FILE_PATH, newPath + child.getRemotePath().substring(lengthOfOldPath));
- if (child.getStoragePath() != null && child.getStoragePath().startsWith(defaultSavePath)) {
- cv.put(ProviderTableMeta.FILE_STORAGE_PATH, defaultSavePath + newPath + child.getStoragePath().substring(lengthOfOldStoragePath));
+ cv.put(
+ ProviderTableMeta.FILE_PATH,
+ newPath + child.getRemotePath().substring(lengthOfOldPath)
+ );
+ if ( child.getStoragePath() != null &&
+ child.getStoragePath().startsWith(defaultSavePath) ) {
+ cv.put(
+ ProviderTableMeta.FILE_STORAGE_PATH,
+ defaultSavePath + newPath +
+ child.getStoragePath().substring(lengthOfOldStoragePath)
+ );
}
- operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+ operations.add(
+ ContentProviderOperation.
+ newUpdate(ProviderTableMeta.CONTENT_URI).
withValues(cv).
- withSelection( ProviderTableMeta._ID + "=?",
- new String[] { String.valueOf(child.getFileId()) })
- .build());
+ withSelection(
+ ProviderTableMeta._ID + "=?",
+ new String[] { String.valueOf(child.getFileId()) }
+ ).
+ build()
+ );
} while (c.moveToNext());
}
c.close();
@@ -551,16 +659,138 @@ public class FileDataStorageManager {
}
} catch (OperationApplicationException e) {
- Log_OC.e(TAG, "Fail to update descendants of " + folder.getFileId() + " in database", e);
+ Log_OC.e(TAG, "Fail to update descendants of " +
+ folder.getFileId() + " in database", e);
} catch (RemoteException e) {
- Log_OC.e(TAG, "Fail to update desendants of " + folder.getFileId() + " in database", e);
+ Log_OC.e(TAG, "Fail to update desendants of " +
+ folder.getFileId() + " in database", e);
}
}
}
+ public void moveLocalFile(OCFile file, String targetPath, String targetParentPath) {
+
+ if (file != null && file.fileExists() && !OCFile.ROOT_PATH.equals(file.getFileName())) {
+
+ OCFile targetParent = getFileByPath(targetParentPath);
+ if (targetParent == null) {
+ // TODO panic
+ }
+
+ /// 1. get all the descendants of the moved element in a single QUERY
+ Cursor c = null;
+ if (getContentProviderClient() != null) {
+ try {
+ c = getContentProviderClient().query(
+ ProviderTableMeta.CONTENT_URI,
+ null,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + " LIKE ? ",
+ new String[] {
+ mAccount.name,
+ file.getRemotePath() + "%"
+ },
+ ProviderTableMeta.FILE_PATH + " ASC "
+ );
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, e.getMessage());
+ }
+
+ } else {
+ c = getContentResolver().query(
+ ProviderTableMeta.CONTENT_URI,
+ null,
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PATH + " LIKE ? ",
+ new String[] {
+ mAccount.name,
+ file.getRemotePath() + "%"
+ },
+ ProviderTableMeta.FILE_PATH + " ASC "
+ );
+ }
+
+ /// 2. prepare a batch of update operations to change all the descendants
+ ArrayList operations =
+ new ArrayList(c.getCount());
+ String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name);
+ if (c.moveToFirst()) {
+ int lengthOfOldPath = file.getRemotePath().length();
+ int lengthOfOldStoragePath = defaultSavePath.length() + lengthOfOldPath;
+ do {
+ ContentValues cv = new ContentValues(); // keep construction in the loop
+ OCFile child = createFileInstance(c);
+ cv.put(
+ ProviderTableMeta.FILE_PATH,
+ targetPath + child.getRemotePath().substring(lengthOfOldPath)
+ );
+ if (child.getStoragePath() != null &&
+ child.getStoragePath().startsWith(defaultSavePath)) {
+ // update link to downloaded content - but local move is not done here!
+ cv.put(
+ ProviderTableMeta.FILE_STORAGE_PATH,
+ defaultSavePath + targetPath +
+ child.getStoragePath().substring(lengthOfOldStoragePath)
+ );
+ }
+ if (child.getRemotePath().equals(file.getRemotePath())) {
+ cv.put(
+ ProviderTableMeta.FILE_PARENT,
+ targetParent.getFileId()
+ );
+ }
+ operations.add(
+ ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+ withValues(cv).
+ withSelection(
+ ProviderTableMeta._ID + "=?",
+ new String[] { String.valueOf(child.getFileId()) }
+ )
+ .build());
+
+ } while (c.moveToNext());
+ }
+ c.close();
+
+ /// 3. apply updates in batch
+ try {
+ if (getContentResolver() != null) {
+ getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+ } else {
+ getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (Exception e) {
+ Log_OC.e(
+ TAG,
+ "Fail to update " + file.getFileId() + " and descendants in database",
+ e
+ );
+ }
+
+ /// 4. move in local file system
+ String localPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, file);
+ File localFile = new File(localPath);
+ boolean renamed = false;
+ if (localFile.exists()) {
+ File targetFile = new File(defaultSavePath + targetPath);
+ File targetFolder = targetFile.getParentFile();
+ if (!targetFolder.exists()) {
+ targetFolder.mkdirs();
+ }
+ renamed = localFile.renameTo(targetFile);
+ }
+ Log_OC.d(TAG, "Local file RENAMED : " + renamed);
+
+ }
+
+ }
+
+
private Vector getFolderContent(long parentId) {
Vector ret = new Vector();
@@ -663,6 +893,7 @@ public class FileDataStorageManager {
}
return c;
}
+
private OCFile createFileInstance(Cursor c) {
OCFile file = null;
@@ -678,7 +909,9 @@ public class FileDataStorageManager {
file.setStoragePath(c.getString(c
.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH)));
if (file.getStoragePath() == null) {
- // try to find existing file and bind it with current account; - with the current update of SynchronizeFolderOperation, this won't be necessary anymore after a full synchronization of the account
+ // try to find existing file and bind it with current account;
+ // with the current update of SynchronizeFolderOperation, this won't be
+ // necessary anymore after a full synchronization of the account
File f = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file));
if (f.exists()) {
file.setStoragePath(f.getAbsolutePath());
@@ -701,9 +934,618 @@ public class FileDataStorageManager {
file.setKeepInSync(c.getInt(
c.getColumnIndex(ProviderTableMeta.FILE_KEEP_IN_SYNC)) == 1 ? true : false);
file.setEtag(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_ETAG)));
+ file.setShareByLink(c.getInt(
+ c.getColumnIndex(ProviderTableMeta.FILE_SHARE_BY_LINK)) == 1 ? true : false);
+ file.setPublicLink(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PUBLIC_LINK)));
+ file.setPermissions(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PERMISSIONS)));
+ file.setRemoteId(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID)));
+ file.setNeedsUpdateThumbnail(c.getInt(
+ c.getColumnIndex(ProviderTableMeta.FILE_UPDATE_THUMBNAIL)) == 1 ? true : false);
}
return file;
}
+
+ /**
+ * Returns if the file/folder is shared by link or not
+ * @param path Path of the file/folder
+ * @return
+ */
+ public boolean isShareByLink(String path) {
+ Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path);
+ OCFile file = null;
+ if (c.moveToFirst()) {
+ file = createFileInstance(c);
+ }
+ c.close();
+ return file.isShareByLink();
+ }
+
+ /**
+ * Returns the public link of the file/folder
+ * @param path Path of the file/folder
+ * @return
+ */
+ public String getPublicLink(String path) {
+ Cursor c = getCursorForValue(ProviderTableMeta.FILE_STORAGE_PATH, path);
+ OCFile file = null;
+ if (c.moveToFirst()) {
+ file = createFileInstance(c);
+ }
+ c.close();
+ return file.getPublicLink();
+ }
+
+
+ // Methods for Shares
+ public boolean saveShare(OCShare share) {
+ boolean overriden = false;
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
+ cv.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
+ cv.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
+ cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
+ cv.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
+ cv.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
+ cv.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
+ cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
+ cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
+ cv.put(
+ ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
+ share.getSharedWithDisplayName()
+ );
+ cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
+ cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
+ cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+ cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
+
+ if (shareExists(share.getIdRemoteShared())) { // for renamed files
+
+ overriden = true;
+ if (getContentResolver() != null) {
+ getContentResolver().update(ProviderTableMeta.CONTENT_URI_SHARE, cv,
+ ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
+ new String[] { String.valueOf(share.getIdRemoteShared()) });
+ } else {
+ try {
+ getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_SHARE,
+ cv, ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
+ new String[] { String.valueOf(share.getIdRemoteShared()) });
+ } catch (RemoteException e) {
+ Log_OC.e(TAG,
+ "Fail to insert insert file to database "
+ + e.getMessage());
+ }
+ }
+ } else {
+ Uri result_uri = null;
+ if (getContentResolver() != null) {
+ result_uri = getContentResolver().insert(
+ ProviderTableMeta.CONTENT_URI_SHARE, cv);
+ } else {
+ try {
+ result_uri = getContentProviderClient().insert(
+ ProviderTableMeta.CONTENT_URI_SHARE, cv);
+ } catch (RemoteException e) {
+ Log_OC.e(TAG,
+ "Fail to insert insert file to database "
+ + e.getMessage());
+ }
+ }
+ if (result_uri != null) {
+ long new_id = Long.parseLong(result_uri.getPathSegments()
+ .get(1));
+ share.setId(new_id);
+ }
+ }
+
+ return overriden;
+ }
+
+
+ public OCShare getFirstShareByPathAndType(String path, ShareType type) {
+ Cursor c = null;
+ if (getContentResolver() != null) {
+ c = getContentResolver().query(
+ ProviderTableMeta.CONTENT_URI_SHARE,
+ null,
+ ProviderTableMeta.OCSHARES_PATH + "=? AND "
+ + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
+ new String[] { path, Integer.toString(type.getValue()), mAccount.name },
+ null);
+ } else {
+ try {
+ c = getContentProviderClient().query(
+ ProviderTableMeta.CONTENT_URI_SHARE,
+ null,
+ ProviderTableMeta.OCSHARES_PATH + "=? AND "
+ + ProviderTableMeta.OCSHARES_SHARE_TYPE + "=? AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
+ new String[] { path, Integer.toString(type.getValue()), mAccount.name },
+ null);
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Could not get file details: " + e.getMessage());
+ c = null;
+ }
+ }
+ OCShare share = null;
+ if (c.moveToFirst()) {
+ share = createShareInstance(c);
+ }
+ c.close();
+ return share;
+ }
+
+ private OCShare createShareInstance(Cursor c) {
+ OCShare share = null;
+ if (c != null) {
+ share = new OCShare(c.getString(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_PATH)));
+ share.setId(c.getLong(c.getColumnIndex(ProviderTableMeta._ID)));
+ share.setFileSource(c.getLong(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_ITEM_SOURCE)));
+ share.setShareType(ShareType.fromValue(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_TYPE))));
+ share.setPermissions(c.getInt(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_PERMISSIONS)));
+ share.setSharedDate(c.getLong(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_SHARED_DATE)));
+ share.setExpirationDate(c.getLong(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_EXPIRATION_DATE)));
+ share.setToken(c.getString(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_TOKEN)));
+ share.setSharedWithDisplayName(c.getString(c
+ .getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME)));
+ share.setIsFolder(c.getInt(
+ c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1 ? true : false);
+ share.setUserId(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_USER_ID)));
+ share.setIdRemoteShared(
+ c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED))
+ );
+
+ }
+ return share;
+ }
+
+ private boolean shareExists(String cmp_key, String value) {
+ Cursor c;
+ if (getContentResolver() != null) {
+ c = getContentResolver()
+ .query(ProviderTableMeta.CONTENT_URI_SHARE,
+ null,
+ cmp_key + "=? AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER
+ + "=?",
+ new String[] { value, mAccount.name }, null);
+ } else {
+ try {
+ c = getContentProviderClient().query(
+ ProviderTableMeta.CONTENT_URI_SHARE,
+ null,
+ cmp_key + "=? AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?",
+ new String[] { value, mAccount.name }, null);
+ } catch (RemoteException e) {
+ Log_OC.e(TAG,
+ "Couldn't determine file existance, assuming non existance: "
+ + e.getMessage());
+ return false;
+ }
+ }
+ boolean retval = c.moveToFirst();
+ c.close();
+ return retval;
+ }
+
+ private boolean shareExists(long remoteId) {
+ return shareExists(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
+ }
+
+ private void cleanSharedFiles() {
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
+ cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?";
+ String [] whereArgs = new String[]{mAccount.name};
+
+ if (getContentResolver() != null) {
+ getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
+
+ } else {
+ try {
+ getContentProviderClient().update(
+ ProviderTableMeta.CONTENT_URI, cv, where, whereArgs
+ );
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in cleanSharedFiles" + e.getMessage());
+ }
+ }
+ }
+
+ private void cleanSharedFilesInFolder(OCFile folder) {
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
+ cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
+ String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " +
+ ProviderTableMeta.FILE_PARENT + "=?";
+ String [] whereArgs = new String[] { mAccount.name , String.valueOf(folder.getFileId()) };
+
+ if (getContentResolver() != null) {
+ getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
+
+ } else {
+ try {
+ getContentProviderClient().update(
+ ProviderTableMeta.CONTENT_URI, cv, where, whereArgs
+ );
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in cleanSharedFilesInFolder " + e.getMessage());
+ }
+ }
+ }
+
+ private void cleanShares() {
+ String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
+ String [] whereArgs = new String[]{mAccount.name};
+
+ if (getContentResolver() != null) {
+ getContentResolver().delete(ProviderTableMeta.CONTENT_URI_SHARE, where, whereArgs);
+
+ } else {
+ try {
+ getContentProviderClient().delete(
+ ProviderTableMeta.CONTENT_URI_SHARE, where, whereArgs
+ );
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in cleanShares" + e.getMessage());
+ }
+ }
+ }
+
+ public void saveShares(Collection shares) {
+ cleanShares();
+ if (shares != null) {
+ ArrayList operations =
+ new ArrayList(shares.size());
+
+ // prepare operations to insert or update files to save in the given folder
+ for (OCShare share : shares) {
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
+ cv.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
+ cv.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
+ cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
+ cv.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
+ cv.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
+ cv.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
+ cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
+ cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
+ cv.put(
+ ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
+ share.getSharedWithDisplayName()
+ );
+ cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
+ cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
+ cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+ cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
+
+ if (shareExists(share.getIdRemoteShared())) {
+ // updating an existing file
+ operations.add(
+ ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
+ withValues(cv).
+ withSelection(
+ ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
+ new String[] { String.valueOf(share.getIdRemoteShared()) }
+ ).
+ build()
+ );
+
+ } else {
+ // adding a new file
+ operations.add(
+ ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI_SHARE).
+ withValues(cv).
+ build()
+ );
+ }
+ }
+
+ // apply operations in batch
+ if (operations.size() > 0) {
+ @SuppressWarnings("unused")
+ ContentProviderResult[] results = null;
+ Log_OC.d(TAG, "Sending " + operations.size() +
+ " operations to FileContentProvider");
+ try {
+ if (getContentResolver() != null) {
+ results = getContentResolver().applyBatch(
+ MainApp.getAuthority(), operations
+ );
+
+ } else {
+ results = getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (OperationApplicationException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ }
+ }
+ }
+
+ }
+
+ public void updateSharedFiles(Collection sharedFiles) {
+ cleanSharedFiles();
+
+ if (sharedFiles != null) {
+ ArrayList operations =
+ new ArrayList(sharedFiles.size());
+
+ // prepare operations to insert or update files to save in the given folder
+ for (OCFile file : sharedFiles) {
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.FILE_MODIFIED, file.getModificationTimestamp());
+ cv.put(
+ ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA,
+ file.getModificationTimestampAtLastSyncForData()
+ );
+ cv.put(ProviderTableMeta.FILE_CREATION, file.getCreationTimestamp());
+ cv.put(ProviderTableMeta.FILE_CONTENT_LENGTH, file.getFileLength());
+ cv.put(ProviderTableMeta.FILE_CONTENT_TYPE, file.getMimetype());
+ cv.put(ProviderTableMeta.FILE_NAME, file.getFileName());
+ cv.put(ProviderTableMeta.FILE_PARENT, file.getParentId());
+ cv.put(ProviderTableMeta.FILE_PATH, file.getRemotePath());
+ if (!file.isFolder()) {
+ cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
+ }
+ cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
+ cv.put(ProviderTableMeta.FILE_LAST_SYNC_DATE, file.getLastSyncDateForProperties());
+ cv.put(
+ ProviderTableMeta.FILE_LAST_SYNC_DATE_FOR_DATA,
+ file.getLastSyncDateForData()
+ );
+ cv.put(ProviderTableMeta.FILE_KEEP_IN_SYNC, file.keepInSync() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
+ cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
+ cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
+ cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
+ cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
+ cv.put(
+ ProviderTableMeta.FILE_UPDATE_THUMBNAIL,
+ file.needsUpdateThumbnail() ? 1 : 0
+ );
+
+ boolean existsByPath = fileExists(file.getRemotePath());
+ if (existsByPath || fileExists(file.getFileId())) {
+ // updating an existing file
+ operations.add(
+ ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
+ withValues(cv).
+ withSelection(
+ ProviderTableMeta._ID + "=?",
+ new String[] { String.valueOf(file.getFileId()) }
+ ).build()
+ );
+
+ } else {
+ // adding a new file
+ operations.add(
+ ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI).
+ withValues(cv).
+ build()
+ );
+ }
+ }
+
+ // apply operations in batch
+ if (operations.size() > 0) {
+ @SuppressWarnings("unused")
+ ContentProviderResult[] results = null;
+ Log_OC.d(TAG, "Sending " + operations.size() +
+ " operations to FileContentProvider");
+ try {
+ if (getContentResolver() != null) {
+ results = getContentResolver().applyBatch(
+ MainApp.getAuthority(), operations
+ );
+
+ } else {
+ results = getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (OperationApplicationException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ }
+ }
+ }
+
+ }
+
+ public void removeShare(OCShare share){
+ Uri share_uri = ProviderTableMeta.CONTENT_URI_SHARE;
+ String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" + " AND " +
+ ProviderTableMeta.FILE_PATH + "=?";
+ String [] whereArgs = new String[]{mAccount.name, share.getPath()};
+ if (getContentProviderClient() != null) {
+ try {
+ getContentProviderClient().delete(share_uri, where, whereArgs);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ } else {
+ getContentResolver().delete(share_uri, where, whereArgs);
+ }
+ }
+
+ public void saveSharesDB(ArrayList shares) {
+ saveShares(shares);
+
+ ArrayList sharedFiles = new ArrayList();
+
+ for (OCShare share : shares) {
+ // Get the path
+ String path = share.getPath();
+ if (share.isFolder()) {
+ path = path + FileUtils.PATH_SEPARATOR;
+ }
+
+ // Update OCFile with data from share: ShareByLink ¿and publicLink?
+ OCFile file = getFileByPath(path);
+ if (file != null) {
+ if (share.getShareType().equals(ShareType.PUBLIC_LINK)) {
+ file.setShareByLink(true);
+ sharedFiles.add(file);
+ }
+ }
+ }
+
+ updateSharedFiles(sharedFiles);
+ }
+
+
+ public void saveSharesInFolder(ArrayList shares, OCFile folder) {
+ cleanSharedFilesInFolder(folder);
+ ArrayList operations = new ArrayList();
+ operations = prepareRemoveSharesInFolder(folder, operations);
+
+ if (shares != null) {
+ // prepare operations to insert or update files to save in the given folder
+ for (OCShare share : shares) {
+ ContentValues cv = new ContentValues();
+ cv.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
+ cv.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
+ cv.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
+ cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
+ cv.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
+ cv.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
+ cv.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
+ cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
+ cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
+ cv.put(
+ ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME,
+ share.getSharedWithDisplayName()
+ );
+ cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
+ cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
+ cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+ cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
+
+ /*
+ if (shareExists(share.getIdRemoteShared())) {
+ // updating an existing share resource
+ operations.add(
+ ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
+ withValues(cv).
+ withSelection( ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
+ new String[] { String.valueOf(share.getIdRemoteShared()) })
+ .build());
+
+ } else {
+ */
+ // adding a new share resource
+ operations.add(
+ ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI_SHARE).
+ withValues(cv).
+ build()
+ );
+ //}
+ }
+ }
+
+ // apply operations in batch
+ if (operations.size() > 0) {
+ @SuppressWarnings("unused")
+ ContentProviderResult[] results = null;
+ Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
+ try {
+ if (getContentResolver() != null) {
+ results = getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+ } else {
+ results = getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (OperationApplicationException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ }
+ }
+ //}
+
+ }
+
+ private ArrayList prepareRemoveSharesInFolder(
+ OCFile folder, ArrayList preparedOperations
+ ) {
+ if (folder != null) {
+ String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND "
+ + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
+ String [] whereArgs = new String[]{ "", mAccount.name };
+
+ Vector files = getFolderContent(folder);
+
+ for (OCFile file : files) {
+ whereArgs[0] = file.getRemotePath();
+ preparedOperations.add(
+ ContentProviderOperation.newDelete(ProviderTableMeta.CONTENT_URI_SHARE).
+ withSelection(where, whereArgs).
+ build()
+ );
+ }
+ }
+ return preparedOperations;
+
+ /*
+ if (operations.size() > 0) {
+ try {
+ if (getContentResolver() != null) {
+ getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+
+ } else {
+ getContentProviderClient().applyBatch(operations);
+ }
+
+ } catch (OperationApplicationException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+ }
+ }
+ */
+
+ /*
+ if (getContentResolver() != null) {
+
+ getContentResolver().delete(ProviderTableMeta.CONTENT_URI_SHARE,
+ where,
+ whereArgs);
+ } else {
+ try {
+ getContentProviderClient().delete( ProviderTableMeta.CONTENT_URI_SHARE,
+ where,
+ whereArgs);
+
+ } catch (RemoteException e) {
+ Log_OC.e(TAG, "Exception deleting shares in a folder " + e.getMessage());
+ }
+ }
+ */
+ //}
+ }
}
diff --git a/src/com/owncloud/android/datamodel/OCFile.java b/src/com/owncloud/android/datamodel/OCFile.java
index 67de500975..392d03bc88 100644
--- a/src/com/owncloud/android/datamodel/OCFile.java
+++ b/src/com/owncloud/android/datamodel/OCFile.java
@@ -20,8 +20,8 @@ package com.owncloud.android.datamodel;
import java.io.File;
-import com.owncloud.android.Log_OC;
-
+import com.owncloud.android.lib.common.utils.Log_OC;
+import third_parties.daveKoeller.AlphanumComparator;
import android.os.Parcel;
import android.os.Parcelable;
@@ -61,6 +61,14 @@ public class OCFile implements Parcelable, Comparable {
private boolean mKeepInSync;
private String mEtag;
+
+ private boolean mShareByLink;
+ private String mPublicLink;
+
+ private String mPermissions;
+ private String mRemoteId;
+
+ private boolean mNeedsUpdateThumbnail;
/**
@@ -99,6 +107,12 @@ public class OCFile implements Parcelable, Comparable {
mLastSyncDateForProperties = source.readLong();
mLastSyncDateForData = source.readLong();
mEtag = source.readString();
+ mShareByLink = source.readInt() == 1;
+ mPublicLink = source.readString();
+ mPermissions = source.readString();
+ mRemoteId = source.readString();
+ mNeedsUpdateThumbnail = source.readInt() == 0;
+
}
@Override
@@ -117,6 +131,11 @@ public class OCFile implements Parcelable, Comparable {
dest.writeLong(mLastSyncDateForProperties);
dest.writeLong(mLastSyncDateForData);
dest.writeString(mEtag);
+ dest.writeInt(mShareByLink ? 1 : 0);
+ dest.writeString(mPublicLink);
+ dest.writeString(mPermissions);
+ dest.writeString(mRemoteId);
+ dest.writeInt(mNeedsUpdateThumbnail ? 1 : 0);
}
/**
@@ -325,6 +344,11 @@ public class OCFile implements Parcelable, Comparable {
mKeepInSync = false;
mNeedsUpdating = false;
mEtag = null;
+ mShareByLink = false;
+ mPublicLink = null;
+ mPermissions = null;
+ mRemoteId = null;
+ mNeedsUpdateThumbnail = false;
}
/**
@@ -390,6 +414,14 @@ public class OCFile implements Parcelable, Comparable {
return mNeedsUpdating;
}
+ public boolean needsUpdateThumbnail() {
+ return mNeedsUpdateThumbnail;
+ }
+
+ public void setNeedsUpdateThumbnail(boolean needsUpdateThumbnail) {
+ this.mNeedsUpdateThumbnail = needsUpdateThumbnail;
+ }
+
public long getLastSyncDateForProperties() {
return mLastSyncDateForProperties;
}
@@ -428,7 +460,7 @@ public class OCFile implements Parcelable, Comparable {
} else if (another.isFolder()) {
return 1;
}
- return getRemotePath().toLowerCase().compareTo(another.getRemotePath().toLowerCase());
+ return new AlphanumComparator().compare(this, another);
}
@Override
@@ -445,7 +477,7 @@ public class OCFile implements Parcelable, Comparable {
@Override
public String toString() {
- String asString = "[id=%s, name=%s, mime=%s, downloaded=%s, local=%s, remote=%s, parentId=%s, keepInSinc=%s etag=%s]";
+ String asString = "[id=%s, name=%s, mime=%s, downloaded=%s, local=%s, remote=%s, parentId=%s, keepInSync=%s etag=%s]";
asString = String.format(asString, Long.valueOf(mId), getFileName(), mMimeType, isDown(), mLocalPath, mRemotePath, Long.valueOf(mParentId), Boolean.valueOf(mKeepInSync), mEtag);
return asString;
}
@@ -458,6 +490,23 @@ public class OCFile implements Parcelable, Comparable {
this.mEtag = etag;
}
+
+ public boolean isShareByLink() {
+ return mShareByLink;
+ }
+
+ public void setShareByLink(boolean shareByLink) {
+ this.mShareByLink = shareByLink;
+ }
+
+ public String getPublicLink() {
+ return mPublicLink;
+ }
+
+ public void setPublicLink(String publicLink) {
+ this.mPublicLink = publicLink;
+ }
+
public long getLocalModificationTimestamp() {
if (mLocalPath != null && mLocalPath.length() > 0) {
File f = new File(mLocalPath);
@@ -492,4 +541,20 @@ public class OCFile implements Parcelable, Comparable {
return (result != null) ? result : "";
}
+ public String getPermissions() {
+ return mPermissions;
+ }
+
+ public void setPermissions(String permissions) {
+ this.mPermissions = permissions;
+ }
+
+ public String getRemoteId() {
+ return mRemoteId;
+ }
+
+ public void setRemoteId(String remoteId) {
+ this.mRemoteId = remoteId;
+ }
+
}
diff --git a/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
new file mode 100644
index 0000000000..e75404ef3b
--- /dev/null
+++ b/src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
@@ -0,0 +1,265 @@
+/* ownCloud Android client application
+ * Copyright (C) 2012-2014 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.owncloud.android.datamodel;
+
+import java.io.File;
+import java.lang.ref.WeakReference;
+
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Bitmap.CompressFormat;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.media.ThumbnailUtils;
+import android.os.AsyncTask;
+import android.util.TypedValue;
+import android.widget.ImageView;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.ui.adapter.DiskLruImageCache;
+import com.owncloud.android.utils.BitmapUtils;
+import com.owncloud.android.utils.DisplayUtils;
+
+/**
+ * Manager for concurrent access to thumbnails cache.
+ *
+ * @author Tobias Kaminsky
+ * @author David A. Velasco
+ */
+public class ThumbnailsCacheManager {
+
+ private static final String TAG = ThumbnailsCacheManager.class.getSimpleName();
+
+ private static final String CACHE_FOLDER = "thumbnailCache";
+
+ private static final Object mThumbnailsDiskCacheLock = new Object();
+ private static DiskLruImageCache mThumbnailCache = null;
+ private static boolean mThumbnailCacheStarting = true;
+
+ private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB
+ private static final CompressFormat mCompressFormat = CompressFormat.JPEG;
+ private static final int mCompressQuality = 70;
+
+ public static Bitmap mDefaultImg =
+ BitmapFactory.decodeResource(
+ MainApp.getAppContext().getResources(),
+ DisplayUtils.getResourceId("image/png", "default.png")
+ );
+
+
+ public static class InitDiskCacheTask extends AsyncTask {
+ @Override
+ protected Void doInBackground(File... params) {
+ synchronized (mThumbnailsDiskCacheLock) {
+ mThumbnailCacheStarting = true;
+ if (mThumbnailCache == null) {
+ try {
+ // Check if media is mounted or storage is built-in, if so,
+ // try and use external cache dir; otherwise use internal cache dir
+ final String cachePath =
+ MainApp.getAppContext().getExternalCacheDir().getPath() +
+ File.separator + CACHE_FOLDER;
+ Log_OC.d(TAG, "create dir: " + cachePath);
+ final File diskCacheDir = new File(cachePath);
+ mThumbnailCache = new DiskLruImageCache(
+ diskCacheDir,
+ DISK_CACHE_SIZE,
+ mCompressFormat,
+ mCompressQuality
+ );
+ } catch (Exception e) {
+ Log_OC.d(TAG, "Thumbnail cache could not be opened ", e);
+ mThumbnailCache = null;
+ }
+ }
+ mThumbnailCacheStarting = false; // Finished initialization
+ mThumbnailsDiskCacheLock.notifyAll(); // Wake any waiting threads
+ }
+ return null;
+ }
+ }
+
+
+ public static void addBitmapToCache(String key, Bitmap bitmap) {
+ synchronized (mThumbnailsDiskCacheLock) {
+ if (mThumbnailCache != null) {
+ mThumbnailCache.put(key, bitmap);
+ }
+ }
+ }
+
+
+ public static Bitmap getBitmapFromDiskCache(String key) {
+ synchronized (mThumbnailsDiskCacheLock) {
+ // Wait while disk cache is started from background thread
+ while (mThumbnailCacheStarting) {
+ try {
+ mThumbnailsDiskCacheLock.wait();
+ } catch (InterruptedException e) {}
+ }
+ if (mThumbnailCache != null) {
+ return (Bitmap) mThumbnailCache.getBitmap(key);
+ }
+ }
+ return null;
+ }
+
+
+ public static boolean cancelPotentialWork(OCFile file, ImageView imageView) {
+ final ThumbnailGenerationTask bitmapWorkerTask = getBitmapWorkerTask(imageView);
+
+ if (bitmapWorkerTask != null) {
+ final OCFile bitmapData = bitmapWorkerTask.mFile;
+ // If bitmapData is not yet set or it differs from the new data
+ if (bitmapData == null || bitmapData != file) {
+ // Cancel previous task
+ bitmapWorkerTask.cancel(true);
+ } else {
+ // The same work is already in progress
+ return false;
+ }
+ }
+ // No task associated with the ImageView, or an existing task was cancelled
+ return true;
+ }
+
+ public static ThumbnailGenerationTask getBitmapWorkerTask(ImageView imageView) {
+ if (imageView != null) {
+ final Drawable drawable = imageView.getDrawable();
+ if (drawable instanceof AsyncDrawable) {
+ final AsyncDrawable asyncDrawable = (AsyncDrawable) drawable;
+ return asyncDrawable.getBitmapWorkerTask();
+ }
+ }
+ return null;
+ }
+
+ public static class ThumbnailGenerationTask extends AsyncTask {
+ private final WeakReference mImageViewReference;
+ private OCFile mFile;
+ private FileDataStorageManager mStorageManager;
+
+ public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager) {
+ // Use a WeakReference to ensure the ImageView can be garbage collected
+ mImageViewReference = new WeakReference(imageView);
+ if (storageManager == null)
+ throw new IllegalArgumentException("storageManager must not be NULL");
+ mStorageManager = storageManager;
+ }
+
+ // Decode image in background.
+ @Override
+ protected Bitmap doInBackground(OCFile... params) {
+ Bitmap thumbnail = null;
+
+ try {
+ mFile = params[0];
+ final String imageKey = String.valueOf(mFile.getRemoteId());
+
+ // Check disk cache in background thread
+ thumbnail = getBitmapFromDiskCache(imageKey);
+
+ // Not found in disk cache
+ if (thumbnail == null || mFile.needsUpdateThumbnail()) {
+ // Converts dp to pixel
+ Resources r = MainApp.getAppContext().getResources();
+ int px = (int) Math.round(TypedValue.applyDimension(
+ TypedValue.COMPLEX_UNIT_DIP, 150, r.getDisplayMetrics()
+ ));
+
+ if (mFile.isDown()){
+ Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(
+ mFile.getStoragePath(), px, px);
+
+ if (bitmap != null) {
+ thumbnail = ThumbnailUtils.extractThumbnail(bitmap, px, px);
+
+ // Add thumbnail to cache
+ addBitmapToCache(imageKey, thumbnail);
+
+ mFile.setNeedsUpdateThumbnail(false);
+ mStorageManager.saveFile(mFile);
+ }
+
+ }
+ }
+
+ } catch (Throwable t) {
+ // the app should never break due to a problem with thumbnails
+ Log_OC.e(TAG, "Generation of thumbnail for " + mFile + " failed", t);
+ if (t instanceof OutOfMemoryError) {
+ System.gc();
+ }
+ }
+
+ return thumbnail;
+ }
+
+ protected void onPostExecute(Bitmap bitmap){
+ if (isCancelled()) {
+ bitmap = null;
+ }
+
+ if (mImageViewReference != null && bitmap != null) {
+ final ImageView imageView = mImageViewReference.get();
+ final ThumbnailGenerationTask bitmapWorkerTask =
+ getBitmapWorkerTask(imageView);
+ if (this == bitmapWorkerTask && imageView != null) {
+ if (imageView.getTag().equals(mFile.getFileId())) {
+ imageView.setImageBitmap(bitmap);
+ }
+ }
+ }
+ }
+ }
+
+
+ public static class AsyncDrawable extends BitmapDrawable {
+ private final WeakReference bitmapWorkerTaskReference;
+
+ public AsyncDrawable(
+ Resources res, Bitmap bitmap, ThumbnailGenerationTask bitmapWorkerTask
+ ) {
+
+ super(res, bitmap);
+ bitmapWorkerTaskReference =
+ new WeakReference(bitmapWorkerTask);
+ }
+
+ public ThumbnailGenerationTask getBitmapWorkerTask() {
+ return bitmapWorkerTaskReference.get();
+ }
+ }
+
+
+ /**
+ * Remove from cache the remoteId passed
+ * @param fileRemoteId: remote id of mFile passed
+ */
+ public static void removeFileFromCache(String fileRemoteId){
+ synchronized (mThumbnailsDiskCacheLock) {
+ if (mThumbnailCache != null) {
+ mThumbnailCache.removeKey(fileRemoteId);
+ }
+ mThumbnailsDiskCacheLock.notifyAll(); // Wake any waiting threads
+ }
+ }
+
+}
diff --git a/src/com/owncloud/android/db/DbHandler.java b/src/com/owncloud/android/db/DbHandler.java
index 0ba7b0c98e..717066b706 100644
--- a/src/com/owncloud/android/db/DbHandler.java
+++ b/src/com/owncloud/android/db/DbHandler.java
@@ -17,8 +17,8 @@
*/
package com.owncloud.android.db;
-import com.owncloud.android.Log_OC;
import com.owncloud.android.MainApp;
+import com.owncloud.android.lib.common.utils.Log_OC;
import android.content.ContentValues;
import android.content.Context;
diff --git a/src/com/owncloud/android/db/ProviderMeta.java b/src/com/owncloud/android/db/ProviderMeta.java
index 8701ebd2d1..bc59869a09 100644
--- a/src/com/owncloud/android/db/ProviderMeta.java
+++ b/src/com/owncloud/android/db/ProviderMeta.java
@@ -17,11 +17,11 @@
*/
package com.owncloud.android.db;
-import com.owncloud.android.MainApp;
-
import android.net.Uri;
import android.provider.BaseColumns;
+import com.owncloud.android.MainApp;
+
/**
* Meta-Class that holds various static field information
*
@@ -30,28 +30,28 @@ import android.provider.BaseColumns;
*/
public class ProviderMeta {
- /* These constants are now in MainApp
- public static final String AUTHORITY_FILES = "org.owncloud";
- public static final String DB_FILE = "owncloud.db";
- */
public static final String DB_NAME = "filelist";
- public static final int DB_VERSION = 5;
+ public static final int DB_VERSION = 8;
private ProviderMeta() {
}
static public class ProviderTableMeta implements BaseColumns {
- public static final String DB_NAME = "filelist";
+ public static final String FILE_TABLE_NAME = "filelist";
+ public static final String OCSHARES_TABLE_NAME = "ocshares";
public static final Uri CONTENT_URI = Uri.parse("content://"
+ MainApp.getAuthority() + "/");
public static final Uri CONTENT_URI_FILE = Uri.parse("content://"
+ MainApp.getAuthority() + "/file");
public static final Uri CONTENT_URI_DIR = Uri.parse("content://"
+ MainApp.getAuthority() + "/dir");
+ public static final Uri CONTENT_URI_SHARE = Uri.parse("content://"
+ + MainApp.getAuthority() + "/shares");
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.owncloud.file";
public static final String CONTENT_TYPE_ITEM = "vnd.android.cursor.item/vnd.owncloud.file";
+ // Columns of filelist table
public static final String FILE_PARENT = "parent";
public static final String FILE_NAME = "filename";
public static final String FILE_CREATION = "created";
@@ -66,9 +66,34 @@ public class ProviderMeta {
public static final String FILE_LAST_SYNC_DATE_FOR_DATA = "last_sync_date_for_data";
public static final String FILE_KEEP_IN_SYNC = "keep_in_sync";
public static final String FILE_ETAG = "etag";
+ public static final String FILE_SHARE_BY_LINK = "share_by_link";
+ public static final String FILE_PUBLIC_LINK = "public_link";
+ public static final String FILE_PERMISSIONS = "permissions";
+ public static final String FILE_REMOTE_ID = "remote_id";
+ public static final String FILE_UPDATE_THUMBNAIL = "update_thumbnail";
- public static final String DEFAULT_SORT_ORDER = FILE_NAME
+ public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME
+ " collate nocase asc";
+
+ // Columns of ocshares table
+ public static final String OCSHARES_FILE_SOURCE = "file_source";
+ public static final String OCSHARES_ITEM_SOURCE = "item_source";
+ public static final String OCSHARES_SHARE_TYPE = "share_type";
+ public static final String OCSHARES_SHARE_WITH = "shate_with";
+ public static final String OCSHARES_PATH = "path";
+ public static final String OCSHARES_PERMISSIONS = "permissions";
+ public static final String OCSHARES_SHARED_DATE = "shared_date";
+ public static final String OCSHARES_EXPIRATION_DATE = "expiration_date";
+ public static final String OCSHARES_TOKEN = "token";
+ public static final String OCSHARES_SHARE_WITH_DISPLAY_NAME = "shared_with_display_name";
+ public static final String OCSHARES_IS_DIRECTORY = "is_directory";
+ public static final String OCSHARES_USER_ID = "user_id";
+ public static final String OCSHARES_ID_REMOTE_SHARED = "id_remote_shared";
+ public static final String OCSHARES_ACCOUNT_OWNER = "owner_share";
+
+ public static final String OCSHARES_DEFAULT_SORT_ORDER = OCSHARES_FILE_SOURCE
+ + " collate nocase asc";
+
}
}
diff --git a/src/com/owncloud/android/files/BootupBroadcastReceiver.java b/src/com/owncloud/android/files/BootupBroadcastReceiver.java
index 8a8c430693..4e139aeb9a 100644
--- a/src/com/owncloud/android/files/BootupBroadcastReceiver.java
+++ b/src/com/owncloud/android/files/BootupBroadcastReceiver.java
@@ -18,17 +18,32 @@
package com.owncloud.android.files;
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.files.services.FileObserverService;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.services.observer.FileObserverService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+
+/**
+ * App-registered receiver catching the broadcast intent reporting that the system was
+ * just boot up.
+ *
+ * @author David A. Velasco
+ */
public class BootupBroadcastReceiver extends BroadcastReceiver {
- private static String TAG = "BootupBroadcastReceiver";
+ private static String TAG = BootupBroadcastReceiver.class.getSimpleName();
+ /**
+ * Receives broadcast intent reporting that the system was just boot up.
+ *
+ * Starts {@link FileObserverService} to enable observation of favourite files.
+ *
+ * @param context The context where the receiver is running.
+ * @param intent The intent received.
+ */
@Override
public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
@@ -36,11 +51,8 @@ public class BootupBroadcastReceiver extends BroadcastReceiver {
return;
}
Log_OC.d(TAG, "Starting file observer service...");
- Intent i = new Intent(context, FileObserverService.class);
- i.putExtra(FileObserverService.KEY_FILE_CMD,
- FileObserverService.CMD_INIT_OBSERVED_LIST);
- context.startService(i);
- Log_OC.d(TAG, "DONE");
+ Intent initObservers = FileObserverService.makeInitIntent(context);
+ context.startService(initObservers);
}
}
diff --git a/src/com/owncloud/android/files/FileMenuFilter.java b/src/com/owncloud/android/files/FileMenuFilter.java
new file mode 100644
index 0000000000..6eb746cbf8
--- /dev/null
+++ b/src/com/owncloud/android/files/FileMenuFilter.java
@@ -0,0 +1,247 @@
+/* ownCloud Android client application
+ * Copyright (C) 2014 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.owncloud.android.files;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.accounts.Account;
+import android.content.Context;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.files.services.FileDownloader;
+import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
+import com.owncloud.android.files.services.FileUploader;
+import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
+import com.owncloud.android.ui.activity.ComponentsGetter;
+
+/**
+ * Filters out the file actions available in a given {@link Menu} for a given {@link OCFile}
+ * according to the current state of the latest.
+ *
+ * @author David A. Velasco
+ */
+public class FileMenuFilter {
+
+ private OCFile mFile;
+ private ComponentsGetter mComponentsGetter;
+ private Account mAccount;
+ private Context mContext;
+
+ /**
+ * Constructor
+ *
+ * @param targetFile {@link OCFile} target of the action to filter in the {@link Menu}.
+ * @param account ownCloud {@link Account} holding targetFile.
+ * @param cg Accessor to app components, needed to get access the
+ * {@link FileUploader} and {@link FileDownloader} services.
+ * @param context Android {@link Context}, needed to access build setup resources.
+ */
+ public FileMenuFilter(OCFile targetFile, Account account, ComponentsGetter cg, Context context) {
+ mFile = targetFile;
+ mAccount = account;
+ mComponentsGetter = cg;
+ mContext = context;
+ }
+
+
+ /**
+ * Filters out the file actions available in the passed {@link Menu} taken into account
+ * the state of the {@link OCFile} held by the filter.
+ *
+ * @param menu Options or context menu to filter.
+ */
+ public void filter(Menu menu) {
+ List toShow = new ArrayList();
+ List toHide = new ArrayList();
+
+ filter(toShow, toHide);
+
+ MenuItem item = null;
+ for (int i : toShow) {
+ item = menu.findItem(i);
+ if (item != null) {
+ item.setVisible(true);
+ item.setEnabled(true);
+ }
+ }
+
+ for (int i : toHide) {
+ item = menu.findItem(i);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+ }
+ }
+
+ /**
+ * Filters out the file actions available in the passed {@link Menu} taken into account
+ * the state of the {@link OCFile} held by the filter.
+ *
+ * Second method needed thanks to ActionBarSherlock.
+ *
+ * TODO Get rid of it when ActionBarSherlock is replaced for newer Android Support Library.
+ *
+ * @param menu Options or context menu to filter.
+ */
+ public void filter(com.actionbarsherlock.view.Menu menu) {
+
+ List toShow = new ArrayList();
+ List toHide = new ArrayList();
+
+ filter(toShow, toHide);
+
+ com.actionbarsherlock.view.MenuItem item = null;
+ for (int i : toShow) {
+ item = menu.findItem(i);
+ if (item != null) {
+ item.setVisible(true);
+ item.setEnabled(true);
+ }
+ }
+ for (int i : toHide) {
+ item = menu.findItem(i);
+ if (item != null) {
+ item.setVisible(false);
+ item.setEnabled(false);
+ }
+ }
+ }
+
+ /**
+ * Performs the real filtering, to be applied in the {@link Menu} by the caller methods.
+ *
+ * Decides what actions must be shown and hidden.
+ *
+ * @param toShow List to save the options that must be shown in the menu.
+ * @param toHide List to save the options that must be shown in the menu.
+ */
+ private void filter(List toShow, List toHide) {
+ boolean downloading = false;
+ boolean uploading = false;
+ if (mComponentsGetter != null && mFile != null && mAccount != null) {
+ FileDownloaderBinder downloaderBinder = mComponentsGetter.getFileDownloaderBinder();
+ downloading = downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile);
+ FileUploaderBinder uploaderBinder = mComponentsGetter.getFileUploaderBinder();
+ uploading = uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile);
+ }
+
+ /// decision is taken for each possible action on a file in the menu
+
+ // DOWNLOAD
+ if (mFile == null || mFile.isFolder() || mFile.isDown() || downloading || uploading) {
+ toHide.add(R.id.action_download_file);
+
+ } else {
+ toShow.add(R.id.action_download_file);
+ }
+
+ // RENAME
+ if (mFile == null || downloading || uploading) {
+ toHide.add(R.id.action_rename_file);
+
+ } else {
+ toShow.add(R.id.action_rename_file);
+ }
+
+ // MOVE
+ if (mFile == null || downloading || uploading) {
+ toHide.add(R.id.action_move);
+
+ } else {
+ toShow.add(R.id.action_move);
+ }
+
+ // REMOVE
+ if (mFile == null || downloading || uploading) {
+ toHide.add(R.id.action_remove_file);
+
+ } else {
+ toShow.add(R.id.action_remove_file);
+ }
+
+ // OPEN WITH (different to preview!)
+ if (mFile == null || mFile.isFolder() || !mFile.isDown() || downloading || uploading) {
+ toHide.add(R.id.action_open_file_with);
+
+ } else {
+ toShow.add(R.id.action_open_file_with);
+ }
+
+
+ // CANCEL DOWNLOAD
+ if (mFile == null || !downloading || mFile.isFolder()) {
+ toHide.add(R.id.action_cancel_download);
+ } else {
+ toShow.add(R.id.action_cancel_download);
+ }
+
+ // CANCEL UPLOAD
+ if (mFile == null || !uploading || mFile.isFolder()) {
+ toHide.add(R.id.action_cancel_upload);
+ } else {
+ toShow.add(R.id.action_cancel_upload);
+ }
+
+ // SYNC FILE CONTENTS
+ if (mFile == null || mFile.isFolder() || !mFile.isDown() || downloading || uploading) {
+ toHide.add(R.id.action_sync_file);
+ } else {
+ toShow.add(R.id.action_sync_file);
+ }
+
+ // SHARE FILE
+ // TODO add check on SHARE available on server side?
+ if (mFile == null) {
+ toHide.add(R.id.action_share_file);
+ } else {
+ toShow.add(R.id.action_share_file);
+ }
+
+ // UNSHARE FILE
+ // TODO add check on SHARE available on server side?
+ if (mFile == null || !mFile.isShareByLink()) {
+ toHide.add(R.id.action_unshare_file);
+ } else {
+ toShow.add(R.id.action_unshare_file);
+ }
+
+
+ // SEE DETAILS
+ if (mFile == null || mFile.isFolder()) {
+ toHide.add(R.id.action_see_details);
+ } else {
+ toShow.add(R.id.action_see_details);
+ }
+
+ // SEND
+ boolean sendAllowed = (mContext != null &&
+ mContext.getString(R.string.send_files_to_other_apps).equalsIgnoreCase("on"));
+ if (mFile == null || !sendAllowed || mFile.isFolder() || uploading || downloading) {
+ toHide.add(R.id.action_send_file);
+ } else {
+ toShow.add(R.id.action_send_file);
+ }
+
+ }
+
+}
diff --git a/src/com/owncloud/android/files/FileOperationsHelper.java b/src/com/owncloud/android/files/FileOperationsHelper.java
new file mode 100644
index 0000000000..e1ab19536c
--- /dev/null
+++ b/src/com/owncloud/android/files/FileOperationsHelper.java
@@ -0,0 +1,298 @@
+/* ownCloud Android client application
+ * Copyright (C) 2012-2014 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.owncloud.android.files;
+
+import org.apache.http.protocol.HTTP;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.Intent;
+import android.net.Uri;
+import android.support.v4.app.DialogFragment;
+import android.webkit.MimeTypeMap;
+import android.widget.Toast;
+
+import com.owncloud.android.R;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
+import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
+
+import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
+import com.owncloud.android.lib.common.network.WebdavUtils;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import com.owncloud.android.services.OperationsService;
+import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.dialog.ShareLinkToDialog;
+
+/**
+ *
+ * @author masensio
+ * @author David A. Velasco
+ */
+public class FileOperationsHelper {
+
+ private static final String TAG = FileOperationsHelper.class.getName();
+
+ private static final String FTAG_CHOOSER_DIALOG = "CHOOSER_DIALOG";
+
+ protected FileActivity mFileActivity = null;
+
+ /// Identifier of operation in progress which result shouldn't be lost
+ private long mWaitingForOpId = Long.MAX_VALUE;
+
+ public FileOperationsHelper(FileActivity fileActivity) {
+ mFileActivity = fileActivity;
+ }
+
+
+ public void openFile(OCFile file) {
+ if (file != null) {
+ String storagePath = file.getStoragePath();
+ String encodedStoragePath = WebdavUtils.encodePath(storagePath);
+
+ Intent intentForSavedMimeType = new Intent(Intent.ACTION_VIEW);
+ intentForSavedMimeType.setDataAndType(Uri.parse("file://"+ encodedStoragePath), file.getMimetype());
+ intentForSavedMimeType.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
+ Intent intentForGuessedMimeType = null;
+ if (storagePath.lastIndexOf('.') >= 0) {
+ String guessedMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(storagePath.substring(storagePath.lastIndexOf('.') + 1));
+ if (guessedMimeType != null && !guessedMimeType.equals(file.getMimetype())) {
+ intentForGuessedMimeType = new Intent(Intent.ACTION_VIEW);
+ intentForGuessedMimeType.setDataAndType(Uri.parse("file://"+ encodedStoragePath), guessedMimeType);
+ intentForGuessedMimeType.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ }
+ }
+
+ Intent chooserIntent = null;
+ if (intentForGuessedMimeType != null) {
+ chooserIntent = Intent.createChooser(intentForGuessedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
+ } else {
+ chooserIntent = Intent.createChooser(intentForSavedMimeType, mFileActivity.getString(R.string.actionbar_open_with));
+ }
+
+ mFileActivity.startActivity(chooserIntent);
+
+ } else {
+ Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
+ }
+ }
+
+
+ public void shareFileWithLink(OCFile file) {
+
+ if (isSharedSupported()) {
+ if (file != null) {
+ String link = "https://fake.url";
+ Intent intent = createShareWithLinkIntent(link);
+ String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
+ DialogFragment chooserDialog = ShareLinkToDialog.newInstance(intent, packagesToExclude, file);
+ chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+
+ } else {
+ Log_OC.wtf(TAG, "Trying to share a NULL OCFile");
+ }
+
+ } else {
+ // Show a Message
+ Toast t = Toast.makeText(mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG);
+ t.show();
+ }
+ }
+
+
+ public void shareFileWithLinkToApp(OCFile file, Intent sendIntent) {
+
+ if (file != null) {
+ mFileActivity.showLoadingDialog();
+
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_CREATE_SHARE);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_SEND_INTENT, sendIntent);
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+ } else {
+ Log_OC.wtf(TAG, "Trying to open a NULL OCFile");
+ }
+ }
+
+
+ private Intent createShareWithLinkIntent(String link) {
+ Intent intentToShareLink = new Intent(Intent.ACTION_SEND);
+ intentToShareLink.putExtra(Intent.EXTRA_TEXT, link);
+ intentToShareLink.setType(HTTP.PLAIN_TEXT_TYPE);
+ return intentToShareLink;
+ }
+
+
+ /**
+ * @return 'True' if the server supports the Share API
+ */
+ public boolean isSharedSupported() {
+ if (mFileActivity.getAccount() != null) {
+ AccountManager accountManager = AccountManager.get(mFileActivity);
+
+ String version = accountManager.getUserData(mFileActivity.getAccount(), Constants.KEY_OC_VERSION);
+ return (new OwnCloudVersion(version)).isSharedSupported();
+ }
+ return false;
+ }
+
+
+ public void unshareFileWithLink(OCFile file) {
+
+ if (isSharedSupported()) {
+ // Unshare the file
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_UNSHARE);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+ mFileActivity.showLoadingDialog();
+
+ } else {
+ // Show a Message
+ Toast t = Toast.makeText(mFileActivity, mFileActivity.getString(R.string.share_link_no_support_share_api), Toast.LENGTH_LONG);
+ t.show();
+
+ }
+ }
+
+ public void sendDownloadedFile(OCFile file) {
+ if (file != null) {
+ Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
+ // set MimeType
+ sendIntent.setType(file.getMimetype());
+ sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + file.getStoragePath()));
+ sendIntent.putExtra(Intent.ACTION_SEND, true); // Send Action
+
+ // Show dialog, without the own app
+ String[] packagesToExclude = new String[] { mFileActivity.getPackageName() };
+ DialogFragment chooserDialog = ShareLinkToDialog.newInstance(sendIntent, packagesToExclude, file);
+ chooserDialog.show(mFileActivity.getSupportFragmentManager(), FTAG_CHOOSER_DIALOG);
+
+ } else {
+ Log_OC.wtf(TAG, "Trying to send a NULL OCFile");
+ }
+ }
+
+
+ public void syncFile(OCFile file) {
+ // Sync file
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_SYNC_FILE);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_SYNC_FILE_CONTENTS, true);
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+ mFileActivity.showLoadingDialog();
+ }
+
+
+ public void renameFile(OCFile file, String newFilename) {
+ // RenameFile
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_RENAME);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_NEWNAME, newFilename);
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+ mFileActivity.showLoadingDialog();
+ }
+
+
+ public void removeFile(OCFile file, boolean onlyLocalCopy) {
+ // RemoveFile
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_REMOVE);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_REMOVE_ONLY_LOCAL, onlyLocalCopy);
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+ mFileActivity.showLoadingDialog();
+ }
+
+
+ public void createFolder(String remotePath, boolean createFullPath) {
+ // Create Folder
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_CREATE_FOLDER);
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, remotePath);
+ service.putExtra(OperationsService.EXTRA_CREATE_FULL_PATH, createFullPath);
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+ mFileActivity.showLoadingDialog();
+ }
+
+
+ public void cancelTransference(OCFile file) {
+ Account account = mFileActivity.getAccount();
+ FileDownloaderBinder downloaderBinder = mFileActivity.getFileDownloaderBinder();
+ FileUploaderBinder uploaderBinder = mFileActivity.getFileUploaderBinder();
+ if (downloaderBinder != null && downloaderBinder.isDownloading(account, file)) {
+ // Remove etag for parent, if file is a keep_in_sync
+ if (file.keepInSync()) {
+ OCFile parent = mFileActivity.getStorageManager().getFileById(file.getParentId());
+ parent.setEtag("");
+ mFileActivity.getStorageManager().saveFile(parent);
+ }
+
+ downloaderBinder.cancel(account, file);
+
+ } else if (uploaderBinder != null && uploaderBinder.isUploading(account, file)) {
+ uploaderBinder.cancel(account, file);
+ }
+ }
+
+ /**
+ * Start move file operation
+ * @param newfile File where it is going to be moved
+ * @param currentFile File with the previous info
+ */
+ public void moveFile(OCFile newfile, OCFile currentFile) {
+ // Move files
+ Intent service = new Intent(mFileActivity, OperationsService.class);
+ service.setAction(OperationsService.ACTION_MOVE_FILE);
+ service.putExtra(OperationsService.EXTRA_NEW_PARENT_PATH, newfile.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_REMOTE_PATH, currentFile.getRemotePath());
+ service.putExtra(OperationsService.EXTRA_ACCOUNT, mFileActivity.getAccount());
+ mWaitingForOpId = mFileActivity.getOperationsServiceBinder().newOperation(service);
+
+ mFileActivity.showLoadingDialog();
+ }
+
+
+ public long getOpIdWaitingFor() {
+ return mWaitingForOpId;
+ }
+
+
+ public void setOpIdWaitingFor(long waitingForOpId) {
+ mWaitingForOpId = waitingForOpId;
+ }
+
+
+}
diff --git a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
index fbb6888b5a..efaa803c23 100644
--- a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
+++ b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
@@ -1,6 +1,6 @@
/* ownCloud Android client application
* Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
+ * Copyright (C) 2012-2014 ownCloud Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
@@ -20,11 +20,11 @@ package com.owncloud.android.files;
import java.io.File;
-import com.owncloud.android.Log_OC;
import com.owncloud.android.MainApp;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.db.DbHandler;
import com.owncloud.android.files.services.FileUploader;
+import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.utils.FileStorageUtils;
@@ -32,23 +32,26 @@ import android.accounts.Account;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-//import android.content.IntentFilter;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo.State;
import android.preference.PreferenceManager;
-import android.provider.MediaStore.Images.Media;
+import android.provider.MediaStore.Images;
+import android.provider.MediaStore.Video;
import android.webkit.MimeTypeMap;
public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
- private static String TAG = "InstantUploadBroadcastReceiver";
- private static final String[] CONTENT_PROJECTION = { Media.DATA, Media.DISPLAY_NAME, Media.MIME_TYPE, Media.SIZE };
- //Unofficial action, works for most devices but not HTC. See: https://github.com/owncloud/android/issues/6
+ private static String TAG = InstantUploadBroadcastReceiver.class.getName();
+ // Image action
+ // Unofficial action, works for most devices but not HTC. See: https://github.com/owncloud/android/issues/6
private static String NEW_PHOTO_ACTION_UNOFFICIAL = "com.android.camera.NEW_PICTURE";
- //Officially supported action since SDK 14: http://developer.android.com/reference/android/hardware/Camera.html#ACTION_NEW_PICTURE
+ // Officially supported action since SDK 14: http://developer.android.com/reference/android/hardware/Camera.html#ACTION_NEW_PICTURE
private static String NEW_PHOTO_ACTION = "android.hardware.action.NEW_PICTURE";
+ // Video action
+ // Officially supported action since SDK 14: http://developer.android.com/reference/android/hardware/Camera.html#ACTION_NEW_VIDEO
+ private static String NEW_VIDEO_ACTION = "android.hardware.action.NEW_VIDEO";
@Override
public void onReceive(Context context, Intent intent) {
@@ -56,35 +59,29 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
if (intent.getAction().equals(android.net.ConnectivityManager.CONNECTIVITY_ACTION)) {
handleConnectivityAction(context, intent);
}else if (intent.getAction().equals(NEW_PHOTO_ACTION_UNOFFICIAL)) {
- handleNewPhotoAction(context, intent);
+ handleNewPictureAction(context, intent);
Log_OC.d(TAG, "UNOFFICIAL processed: com.android.camera.NEW_PICTURE");
} else if (intent.getAction().equals(NEW_PHOTO_ACTION)) {
- handleNewPhotoAction(context, intent);
+ handleNewPictureAction(context, intent);
Log_OC.d(TAG, "OFFICIAL processed: android.hardware.action.NEW_PICTURE");
- } else if (intent.getAction().equals(FileUploader.getUploadFinishMessage())) {
- handleUploadFinished(context, intent);
+ } else if (intent.getAction().equals(NEW_VIDEO_ACTION)) {
+ Log_OC.d(TAG, "OFFICIAL processed: android.hardware.action.NEW_VIDEO");
+ handleNewVideoAction(context, intent);
} else {
Log_OC.e(TAG, "Incorrect intent sent: " + intent.getAction());
}
}
- private void handleUploadFinished(Context context, Intent intent) {
- // remove successfull uploading, ignore rest for reupload on reconnect
- /*
- if (intent.getBooleanExtra(FileUploader.EXTRA_UPLOAD_RESULT, false)) {
- DbHandler db = new DbHandler(context);
- String localPath = intent.getStringExtra(FileUploader.EXTRA_OLD_FILE_PATH);
- if (!db.removeIUPendingFile(localPath)) {
- Log_OC.w(TAG, "Tried to remove non existing instant upload file " + localPath);
- }
- db.close();
- }
- */
- }
+ private void handleNewPictureAction(Context context, Intent intent) {
+ Cursor c = null;
+ String file_path = null;
+ String file_name = null;
+ String mime_type = null;
- private void handleNewPhotoAction(Context context, Intent intent) {
- if (!instantUploadEnabled(context)) {
- Log_OC.d(TAG, "Instant upload disabled, aborting uploading");
+ Log_OC.w(TAG, "New photo received");
+
+ if (!instantPictureUploadEnabled(context)) {
+ Log_OC.d(TAG, "Instant picture upload disabled, ignoring new picture");
return;
}
@@ -94,39 +91,72 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
return;
}
- Cursor c = context.getContentResolver().query(intent.getData(), CONTENT_PROJECTION, null, null, null);
-
+ String[] CONTENT_PROJECTION = { Images.Media.DATA, Images.Media.DISPLAY_NAME, Images.Media.MIME_TYPE, Images.Media.SIZE };
+ c = context.getContentResolver().query(intent.getData(), CONTENT_PROJECTION, null, null, null);
if (!c.moveToFirst()) {
Log_OC.e(TAG, "Couldn't resolve given uri: " + intent.getDataString());
return;
}
-
- String file_path = c.getString(c.getColumnIndex(Media.DATA));
- String file_name = c.getString(c.getColumnIndex(Media.DISPLAY_NAME));
- String mime_type = c.getString(c.getColumnIndex(Media.MIME_TYPE));
-
+ file_path = c.getString(c.getColumnIndex(Images.Media.DATA));
+ file_name = c.getString(c.getColumnIndex(Images.Media.DISPLAY_NAME));
+ mime_type = c.getString(c.getColumnIndex(Images.Media.MIME_TYPE));
c.close();
- Log_OC.e(TAG, file_path + "");
+
+ Log_OC.d(TAG, file_path + "");
- // same always temporally the picture to upload
+ // save always temporally the picture to upload
DbHandler db = new DbHandler(context);
db.putFileForLater(file_path, account.name, null);
db.close();
- if (!isOnline(context) || (instantUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
+ if (!isOnline(context) || (instantPictureUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
return;
}
- // register for upload finishe message
- // there is a litte problem with android API, we can register for
- // particular
- // intent in registerReceiver but we cannot unregister from precise
- // intent
- // we can unregister from entire listenings but thats suck a bit.
- // On the other hand this might be only for dynamicly registered
- // broadcast receivers, needs investigation.
- /*IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
- context.getApplicationContext().registerReceiver(this, filter);*/
+ Intent i = new Intent(context, FileUploader.class);
+ i.putExtra(FileUploader.KEY_ACCOUNT, account);
+ i.putExtra(FileUploader.KEY_LOCAL_FILE, file_path);
+ i.putExtra(FileUploader.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(context, file_name));
+ i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);
+ i.putExtra(FileUploader.KEY_MIME_TYPE, mime_type);
+ i.putExtra(FileUploader.KEY_INSTANT_UPLOAD, true);
+ context.startService(i);
+ }
+
+ private void handleNewVideoAction(Context context, Intent intent) {
+ Cursor c = null;
+ String file_path = null;
+ String file_name = null;
+ String mime_type = null;
+
+ Log_OC.w(TAG, "New video received");
+
+ if (!instantVideoUploadEnabled(context)) {
+ Log_OC.d(TAG, "Instant video upload disabled, ignoring new video");
+ return;
+ }
+
+ Account account = AccountUtils.getCurrentOwnCloudAccount(context);
+ if (account == null) {
+ Log_OC.w(TAG, "No owncloud account found for instant upload, aborting");
+ return;
+ }
+
+ String[] CONTENT_PROJECTION = { Video.Media.DATA, Video.Media.DISPLAY_NAME, Video.Media.MIME_TYPE, Video.Media.SIZE };
+ c = context.getContentResolver().query(intent.getData(), CONTENT_PROJECTION, null, null, null);
+ if (!c.moveToFirst()) {
+ Log_OC.e(TAG, "Couldn't resolve given uri: " + intent.getDataString());
+ return;
+ }
+ file_path = c.getString(c.getColumnIndex(Video.Media.DATA));
+ file_name = c.getString(c.getColumnIndex(Video.Media.DISPLAY_NAME));
+ mime_type = c.getString(c.getColumnIndex(Video.Media.MIME_TYPE));
+ c.close();
+ Log_OC.d(TAG, file_path + "");
+
+ if (!isOnline(context) || (instantVideoUploadViaWiFiOnly(context) && !isConnectedViaWiFi(context))) {
+ return;
+ }
Intent i = new Intent(context, FileUploader.class);
i.putExtra(FileUploader.KEY_ACCOUNT, account);
@@ -140,19 +170,17 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
}
private void handleConnectivityAction(Context context, Intent intent) {
- if (!instantUploadEnabled(context)) {
- Log_OC.d(TAG, "Instant upload disabled, abording uploading");
+ if (!instantPictureUploadEnabled(context)) {
+ Log_OC.d(TAG, "Instant upload disabled, don't upload anything");
return;
}
if (!intent.hasExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY)
&& isOnline(context)
- && (!instantUploadViaWiFiOnly(context) || (instantUploadViaWiFiOnly(context) == isConnectedViaWiFi(context) == true))) {
+ && (!instantPictureUploadViaWiFiOnly(context) || (instantPictureUploadViaWiFiOnly(context) == isConnectedViaWiFi(context) == true))) {
DbHandler db = new DbHandler(context);
Cursor c = db.getAwaitingFiles();
if (c.moveToFirst()) {
- //IntentFilter filter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);
- //context.getApplicationContext().registerReceiver(this, filter);
do {
String account_name = c.getString(c.getColumnIndex("account"));
String file_path = c.getString(c.getColumnIndex("path"));
@@ -202,11 +230,19 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
&& cm.getActiveNetworkInfo().getState() == State.CONNECTED;
}
- public static boolean instantUploadEnabled(Context context) {
+ public static boolean instantPictureUploadEnabled(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_uploading", false);
}
- public static boolean instantUploadViaWiFiOnly(Context context) {
+ public static boolean instantVideoUploadEnabled(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_uploading", false);
+ }
+
+ public static boolean instantPictureUploadViaWiFiOnly(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_upload_on_wifi", false);
}
+
+ public static boolean instantVideoUploadViaWiFiOnly(Context context) {
+ return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("instant_video_upload_on_wifi", false);
+ }
}
diff --git a/src/com/owncloud/android/files/OwnCloudFileObserver.java b/src/com/owncloud/android/files/OwnCloudFileObserver.java
deleted file mode 100644
index 964b61c382..0000000000
--- a/src/com/owncloud/android/files/OwnCloudFileObserver.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.files;
-
-import java.io.File;
-
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.datamodel.FileDataStorageManager;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.operations.RemoteOperationResult;
-import com.owncloud.android.operations.SynchronizeFileOperation;
-import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
-import com.owncloud.android.ui.activity.ConflictsResolveActivity;
-
-import android.accounts.Account;
-import android.content.Context;
-import android.content.Intent;
-import android.os.FileObserver;
-
-public class OwnCloudFileObserver extends FileObserver {
-
- private static int MASK = (FileObserver.MODIFY | FileObserver.CLOSE_WRITE);
-
- private static String TAG = OwnCloudFileObserver.class.getSimpleName();
-
- private String mPath;
- private int mMask;
- private Account mOCAccount;
- private Context mContext;
- private boolean mModified;
-
-
- public OwnCloudFileObserver(String path, Account account, Context context) {
- super(path, MASK);
- if (path == null)
- throw new IllegalArgumentException("NULL path argument received");
- if (account == null)
- throw new IllegalArgumentException("NULL account argument received");
- if (context == null)
- throw new IllegalArgumentException("NULL context argument received");
- mPath = path;
- mOCAccount = account;
- mContext = context;
- mModified = false;
- }
-
-
- @Override
- public void onEvent(int event, String path) {
- Log_OC.d(TAG, "Got file modified with event " + event + " and path " + mPath + ((path != null) ? File.separator + path : ""));
- if ((event & MASK) == 0) {
- Log_OC.wtf(TAG, "Incorrect event " + event + " sent for file " + mPath + ((path != null) ? File.separator + path : "") +
- " with registered for " + mMask + " and original path " +
- mPath);
- } else {
- if ((event & FileObserver.MODIFY) != 0) {
- // file changed
- mModified = true;
- }
- // not sure if it's possible, but let's assume that both kind of events can be received at the same time
- if ((event & FileObserver.CLOSE_WRITE) != 0) {
- // file closed
- if (mModified) {
- mModified = false;
- startSyncOperation();
- }
- }
- }
- }
-
-
- private void startSyncOperation() {
- FileDataStorageManager storageManager = new FileDataStorageManager(mOCAccount, mContext.getContentResolver());
- OCFile file = storageManager.getFileByLocalPath(mPath); // a fresh object is needed; many things could have occurred to the file since it was registered to observe
- // again, assuming that local files are linked to a remote file AT MOST, SOMETHING TO BE DONE;
- SynchronizeFileOperation sfo = new SynchronizeFileOperation(file,
- null,
- storageManager,
- mOCAccount,
- true,
- mContext);
- RemoteOperationResult result = sfo.execute(mOCAccount, mContext);
- if (result.getCode() == ResultCode.SYNC_CONFLICT) {
- // ISSUE 5: if the user is not running the app (this is a service!), this can be very intrusive; a notification should be preferred
- Intent i = new Intent(mContext, ConflictsResolveActivity.class);
- i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
- i.putExtra(ConflictsResolveActivity.EXTRA_FILE, file);
- i.putExtra(ConflictsResolveActivity.EXTRA_ACCOUNT, mOCAccount);
- mContext.startActivity(i);
- }
- // TODO save other errors in some point where the user can inspect them later;
- // or maybe just toast them;
- // or nothing, very strange fails
- }
-
-}
diff --git a/src/com/owncloud/android/files/managers/OCNotificationManager.java b/src/com/owncloud/android/files/managers/OCNotificationManager.java
deleted file mode 100644
index 11a8c377f2..0000000000
--- a/src/com/owncloud/android/files/managers/OCNotificationManager.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.files.managers;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.owncloud.android.R;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.widget.RemoteViews;
-
-
-public class OCNotificationManager {
-
- enum NotificationType {
- NOTIFICATION_SIMPLE,
- NOTIFICATION_PROGRESS
- }
-
- static public class NotificationData {
- private String mText, mSubtitle;
- private int mPercent;
- private boolean mOngoing;
-
- public NotificationData(String text, String subtitle, boolean ongoing) {
- this(text, subtitle, -1, ongoing);
- }
-
- public NotificationData(int percent, boolean ongoing) {
- this(null, null, percent, ongoing);
- }
-
- public NotificationData(String text, int percent, boolean ongoing) {
- this(text, null, percent, ongoing);
- }
-
- public NotificationData(String text, String subtitle, int percent, boolean ongoing) {
- mText = text;
- mPercent = percent;
- mSubtitle = subtitle;
- mOngoing = ongoing;
- }
-
- public String getText() { return mText; }
- public int getPercent() { return mPercent; }
- public String getSubtitle() { return mSubtitle; }
- public boolean getOngoing() { return mOngoing; }
- }
-
- static private OCNotificationManager mInstance = null;
-
- private class NotificationTypePair {
- public Notification mNotificaiton;
- public NotificationType mType;
- public NotificationTypePair(Notification n, NotificationType type) {
- mNotificaiton = n;
- mType = type;
- }
- }
-
- private Context mContext;
- private Map mNotificationMap;
- private int mNotificationCounter;
- NotificationManager mNM;
-
- static OCNotificationManager getInstance(Context context) {
- if (mInstance == null)
- mInstance = new OCNotificationManager(context);
- return mInstance;
- }
-
- OCNotificationManager(Context context) {
- mContext = context;
- mNotificationMap = new HashMap();
- mNM = (NotificationManager)mContext.getSystemService(Context.NOTIFICATION_SERVICE);
- mNotificationCounter = 0;
- }
-
- public int postNotification(NotificationType type, NotificationData data) {
- mNotificationCounter++;
- Notification notification = null;
-
- switch (type) {
- case NOTIFICATION_SIMPLE:
- notification = new Notification(R.drawable.icon, data.getText(), System.currentTimeMillis());
- break;
- case NOTIFICATION_PROGRESS:
- notification = new Notification();
- notification.contentView = new RemoteViews(mContext.getPackageName(), R.layout.progressbar_layout);
- notification.contentView.setTextViewText(R.id.status_text,
- data.getText());
- notification.contentView.setImageViewResource(R.id.status_icon,
- R.id.icon);
- notification.contentView.setProgressBar(R.id.status_progress,
- 100,
- data.getPercent(),
- false);
- break;
- default:
- return -1;
- }
- if (data.getOngoing()) {
- notification.flags |= notification.flags | Notification.FLAG_ONGOING_EVENT;
- }
-
- mNotificationMap.put(mNotificationCounter, new NotificationTypePair(notification, type));
- return mNotificationCounter;
- }
-
- public boolean updateNotification(int notification_id, NotificationData data) {
- if (!mNotificationMap.containsKey(notification_id)) {
- return false;
- }
- NotificationTypePair pair = mNotificationMap.get(notification_id);
- switch (pair.mType) {
- case NOTIFICATION_PROGRESS:
- pair.mNotificaiton.contentView.setProgressBar(R.id.status_text,
- 100,
- data.getPercent(),
- false);
- return true;
- case NOTIFICATION_SIMPLE:
- pair.mNotificaiton = new Notification(R.drawable.icon,
- data.getText(), System.currentTimeMillis());
- mNM.notify(notification_id, pair.mNotificaiton);
- return true;
- default:
- return false;
- }
- }
-
- public void discardNotification(int notification_id) {
- mNM.cancel(notification_id);
- mNotificationMap.remove(notification_id);
- }
-}
diff --git a/src/com/owncloud/android/files/services/FileDownloader.java b/src/com/owncloud/android/files/services/FileDownloader.java
index 2e479f4d19..fdc35f8d9c 100644
--- a/src/com/owncloud/android/files/services/FileDownloader.java
+++ b/src/com/owncloud/android/files/services/FileDownloader.java
@@ -28,27 +28,30 @@ import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.network.OwnCloudClientUtils;
+
+import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
+import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.notifications.NotificationBuilderWithProgressBar;
+import com.owncloud.android.notifications.NotificationDelayer;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.FileUtils;
import com.owncloud.android.operations.DownloadFileOperation;
-import com.owncloud.android.operations.RemoteOperationResult;
-import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.preview.PreviewImageActivity;
import com.owncloud.android.ui.preview.PreviewImageFragment;
-
-import eu.alefzero.webdav.OnDatatransferProgressListener;
-
+import com.owncloud.android.utils.ErrorMessageAdapter;
import android.accounts.Account;
import android.accounts.AccountsException;
-import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
@@ -60,9 +63,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
-import android.widget.RemoteViews;
-
-import eu.alefzero.webdav.WebdavClient;
+import android.support.v4.app.NotificationCompat;
public class FileDownloader extends Service implements OnDatatransferProgressListener {
@@ -81,7 +82,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
private Looper mServiceLooper;
private ServiceHandler mServiceHandler;
private IBinder mBinder;
- private WebdavClient mDownloadClient = null;
+ private OwnCloudClient mDownloadClient = null;
private Account mLastAccount = null;
private FileDataStorageManager mStorageManager;
@@ -89,7 +90,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
private DownloadFileOperation mCurrentDownload = null;
private NotificationManager mNotificationManager;
- private Notification mNotification;
+ private NotificationCompat.Builder mNotificationBuilder;
private int mLastPercent;
@@ -284,13 +285,6 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
}
}
-
- @Override
- public void onTransferProgress(long progressRate) {
- // old way, should not be in use any more
- }
-
-
@Override
public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer,
String fileName) {
@@ -354,8 +348,11 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
/// prepare client object to send the request to the ownCloud server
if (mDownloadClient == null || !mLastAccount.equals(mCurrentDownload.getAccount())) {
mLastAccount = mCurrentDownload.getAccount();
- mStorageManager = new FileDataStorageManager(mLastAccount, getContentResolver());
- mDownloadClient = OwnCloudClientUtils.createOwnCloudClient(mLastAccount, getApplicationContext());
+ mStorageManager =
+ new FileDataStorageManager(mLastAccount, getContentResolver());
+ OwnCloudAccount ocAccount = new OwnCloudAccount(mLastAccount, this);
+ mDownloadClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+ getClientFor(ocAccount, this);
}
/// perform the download
@@ -390,16 +387,18 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
* Updates the OC File after a successful download.
*/
private void saveDownloadedFile() {
- OCFile file = mCurrentDownload.getFile();
+ OCFile file = mStorageManager.getFileById(mCurrentDownload.getFile().getFileId());
long syncDate = System.currentTimeMillis();
file.setLastSyncDateForProperties(syncDate);
file.setLastSyncDateForData(syncDate);
+ file.setNeedsUpdateThumbnail(true);
file.setModificationTimestamp(mCurrentDownload.getModificationTimestamp());
file.setModificationTimestampAtLastSyncForData(mCurrentDownload.getModificationTimestamp());
// file.setEtag(mCurrentDownload.getEtag()); // TODO Etag, where available
file.setMimetype(mCurrentDownload.getMimeType());
file.setStoragePath(mCurrentDownload.getSavePath());
file.setFileLength((new File(mCurrentDownload.getSavePath()).length()));
+ file.setRemoteId(mCurrentDownload.getFile().getRemoteId());
mStorageManager.saveFile(file);
}
@@ -412,13 +411,19 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
private void notifyDownloadStart(DownloadFileOperation download) {
/// create status notification with a progress bar
mLastPercent = 0;
- mNotification = new Notification(R.drawable.icon, getString(R.string.downloader_download_in_progress_ticker), System.currentTimeMillis());
- mNotification.flags |= Notification.FLAG_ONGOING_EVENT;
- mNotification.contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.progressbar_layout);
- mNotification.contentView.setProgressBar(R.id.status_progress, 100, 0, download.getSize() < 0);
- mNotification.contentView.setTextViewText(R.id.status_text, String.format(getString(R.string.downloader_download_in_progress_content), 0, new File(download.getSavePath()).getName()));
- mNotification.contentView.setImageViewResource(R.id.status_icon, R.drawable.icon);
-
+ mNotificationBuilder =
+ NotificationBuilderWithProgressBar.newNotificationBuilderWithProgressBar(this);
+ mNotificationBuilder
+ .setSmallIcon(R.drawable.notification_icon)
+ .setTicker(getString(R.string.downloader_download_in_progress_ticker))
+ .setContentTitle(getString(R.string.downloader_download_in_progress_ticker))
+ .setOngoing(true)
+ .setProgress(100, 0, download.getSize() < 0)
+ .setContentText(
+ String.format(getString(R.string.downloader_download_in_progress_content), 0,
+ new File(download.getSavePath()).getName())
+ );
+
/// includes a pending intent in the notification showing the details view of the file
Intent showDetailsIntent = null;
if (PreviewImageFragment.canBePreviewed(download.getFile())) {
@@ -429,9 +434,12 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, download.getFile());
showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, download.getAccount());
showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(), (int)System.currentTimeMillis(), showDetailsIntent, 0);
- mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotification);
+ mNotificationBuilder.setContentIntent(PendingIntent.getActivity(
+ this, (int) System.currentTimeMillis(), showDetailsIntent, 0
+ ));
+
+ mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotificationBuilder.build());
}
@@ -439,27 +447,19 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
* Callback method to update the progress bar in the status notification.
*/
@Override
- public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String fileName) {
+ public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filePath) {
int percent = (int)(100.0*((double)totalTransferredSoFar)/((double)totalToTransfer));
if (percent != mLastPercent) {
- mNotification.contentView.setProgressBar(R.id.status_progress, 100, percent, totalToTransfer < 0);
- String text = String.format(getString(R.string.downloader_download_in_progress_content), percent, fileName);
- mNotification.contentView.setTextViewText(R.id.status_text, text);
- mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotification);
+ mNotificationBuilder.setProgress(100, percent, totalToTransfer < 0);
+ String fileName = filePath.substring(filePath.lastIndexOf(FileUtils.PATH_SEPARATOR) + 1);
+ String text = String.format(getString(R.string.downloader_download_in_progress_content), percent, fileName);
+ mNotificationBuilder.setContentText(text);
+ mNotificationManager.notify(R.string.downloader_download_in_progress_ticker, mNotificationBuilder.build());
}
mLastPercent = percent;
}
- /**
- * Callback method to update the progress bar in the status notification (old version)
- */
- @Override
- public void onTransferProgress(long progressRate) {
- // NOTHING TO DO HERE ANYMORE
- }
-
-
/**
* Updates the status notification with the result of a download operation.
*
@@ -469,50 +469,58 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
private void notifyDownloadResult(DownloadFileOperation download, RemoteOperationResult downloadResult) {
mNotificationManager.cancel(R.string.downloader_download_in_progress_ticker);
if (!downloadResult.isCancelled()) {
- int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker : R.string.downloader_download_failed_ticker;
- int contentId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_content : R.string.downloader_download_failed_content;
- Notification finalNotification = new Notification(R.drawable.icon, getString(tickerId), System.currentTimeMillis());
- finalNotification.flags |= Notification.FLAG_AUTO_CANCEL;
- boolean needsToUpdateCredentials = (downloadResult.getCode() == ResultCode.UNAUTHORIZED ||
- // (downloadResult.isTemporalRedirection() && downloadResult.isIdPRedirection()
- (downloadResult.isIdPRedirection()
- && MainApp.getAuthTokenTypeSamlSessionCookie().equals(mDownloadClient.getAuthTokenType())));
+ int tickerId = (downloadResult.isSuccess()) ? R.string.downloader_download_succeeded_ticker :
+ R.string.downloader_download_failed_ticker;
+
+ boolean needsToUpdateCredentials = (
+ downloadResult.getCode() == ResultCode.UNAUTHORIZED ||
+ downloadResult.isIdPRedirection()
+ );
+ tickerId = (needsToUpdateCredentials) ?
+ R.string.downloader_download_failed_credentials_error : tickerId;
+
+ mNotificationBuilder
+ .setTicker(getString(tickerId))
+ .setContentTitle(getString(tickerId))
+ .setAutoCancel(true)
+ .setOngoing(false)
+ .setProgress(0, 0, false);
+
if (needsToUpdateCredentials) {
+
// let the user update credentials with one click
Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);
updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, download.getAccount());
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ENFORCED_UPDATE, true);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_UPDATE_TOKEN);
+ updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
- finalNotification.contentIntent = PendingIntent.getActivity(this, (int)System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT);
- finalNotification.setLatestEventInfo( getApplicationContext(),
- getString(tickerId),
- String.format(getString(contentId), new File(download.getSavePath()).getName()),
- finalNotification.contentIntent);
+ mNotificationBuilder
+ .setContentIntent(PendingIntent.getActivity(
+ this, (int) System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT));
+
mDownloadClient = null; // grant that future retries on the same account will get the fresh credentials
} else {
- Intent showDetailsIntent = null;
- if (downloadResult.isSuccess()) {
- if (PreviewImageFragment.canBePreviewed(download.getFile())) {
- showDetailsIntent = new Intent(this, PreviewImageActivity.class);
- } else {
- showDetailsIntent = new Intent(this, FileDisplayActivity.class);
- }
- showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, download.getFile());
- showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, download.getAccount());
- showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-
- } else {
- // TODO put something smart in showDetailsIntent
- showDetailsIntent = new Intent();
- }
- finalNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(), (int)System.currentTimeMillis(), showDetailsIntent, 0);
- finalNotification.setLatestEventInfo(getApplicationContext(), getString(tickerId), String.format(getString(contentId), new File(download.getSavePath()).getName()), finalNotification.contentIntent);
+ // TODO put something smart in showDetailsIntent
+ Intent showDetailsIntent = new Intent();
+ mNotificationBuilder
+ .setContentIntent(PendingIntent.getActivity(
+ this, (int) System.currentTimeMillis(), showDetailsIntent, 0));
}
- mNotificationManager.notify(tickerId, finalNotification);
+
+ mNotificationBuilder.setContentText(ErrorMessageAdapter.getErrorCauseMessage(downloadResult, download, getResources()));
+ mNotificationManager.notify(tickerId, mNotificationBuilder.build());
+
+ // Remove success notification
+ if (downloadResult.isSuccess()) {
+ // Sleep 2 seconds, so show the notification before remove it
+ NotificationDelayer.cancelWithDelay(
+ mNotificationManager,
+ R.string.downloader_download_succeeded_ticker,
+ 2000);
+ }
+
}
}
diff --git a/src/com/owncloud/android/files/services/FileObserverService.java b/src/com/owncloud/android/files/services/FileObserverService.java
deleted file mode 100644
index 502d45918c..0000000000
--- a/src/com/owncloud/android/files/services/FileObserverService.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.files.services;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.datamodel.FileDataStorageManager;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
-import com.owncloud.android.files.OwnCloudFileObserver;
-import com.owncloud.android.operations.SynchronizeFileOperation;
-import com.owncloud.android.utils.FileStorageUtils;
-
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.app.Service;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.Cursor;
-import android.os.Binder;
-import android.os.IBinder;
-
-public class FileObserverService extends Service {
-
- public final static int CMD_INIT_OBSERVED_LIST = 1;
- public final static int CMD_ADD_OBSERVED_FILE = 2;
- public final static int CMD_DEL_OBSERVED_FILE = 3;
-
- public final static String KEY_FILE_CMD = "KEY_FILE_CMD";
- public final static String KEY_CMD_ARG_FILE = "KEY_CMD_ARG_FILE";
- public final static String KEY_CMD_ARG_ACCOUNT = "KEY_CMD_ARG_ACCOUNT";
-
- private static String TAG = FileObserverService.class.getSimpleName();
-
- private static Map mObserversMap;
- private static DownloadCompletedReceiverBis mDownloadReceiver;
- private IBinder mBinder = new LocalBinder();
-
- public class LocalBinder extends Binder {
- FileObserverService getService() {
- return FileObserverService.this;
- }
- }
-
- @Override
- public void onCreate() {
- super.onCreate();
- mDownloadReceiver = new DownloadCompletedReceiverBis();
-
- IntentFilter filter = new IntentFilter();
- filter.addAction(FileDownloader.getDownloadAddedMessage());
- filter.addAction(FileDownloader.getDownloadFinishMessage());
- registerReceiver(mDownloadReceiver, filter);
-
- mObserversMap = new HashMap();
- //initializeObservedList();
- }
-
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- unregisterReceiver(mDownloadReceiver);
- mObserversMap = null; // TODO study carefully the life cycle of Services to grant the best possible observance
- Log_OC.d(TAG, "Bye, bye");
- }
-
-
- @Override
- public IBinder onBind(Intent intent) {
- return mBinder;
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- // this occurs when system tries to restart
- // service, so we need to reinitialize observers
- if (intent == null) {
- initializeObservedList();
- return Service.START_STICKY;
- }
-
- if (!intent.hasExtra(KEY_FILE_CMD)) {
- Log_OC.e(TAG, "No KEY_FILE_CMD argument given");
- return Service.START_STICKY;
- }
-
- switch (intent.getIntExtra(KEY_FILE_CMD, -1)) {
- case CMD_INIT_OBSERVED_LIST:
- initializeObservedList();
- break;
- case CMD_ADD_OBSERVED_FILE:
- addObservedFile( (OCFile)intent.getParcelableExtra(KEY_CMD_ARG_FILE),
- (Account)intent.getParcelableExtra(KEY_CMD_ARG_ACCOUNT));
- break;
- case CMD_DEL_OBSERVED_FILE:
- removeObservedFile( (OCFile)intent.getParcelableExtra(KEY_CMD_ARG_FILE),
- (Account)intent.getParcelableExtra(KEY_CMD_ARG_ACCOUNT));
- break;
- default:
- Log_OC.wtf(TAG, "Incorrect key given");
- }
-
- return Service.START_STICKY;
- }
-
-
- /**
- * Read from the local database the list of files that must to be kept synchronized and
- * starts file observers to monitor local changes on them
- */
- private void initializeObservedList() {
- mObserversMap.clear();
- Cursor c = getContentResolver().query(
- ProviderTableMeta.CONTENT_URI,
- null,
- ProviderTableMeta.FILE_KEEP_IN_SYNC + " = ?",
- new String[] {String.valueOf(1)},
- null);
- if (c == null || !c.moveToFirst()) return;
- AccountManager acm = AccountManager.get(this);
- Account[] accounts = acm.getAccounts();
- do {
- Account account = null;
- for (Account a : accounts)
- if (a.name.equals(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_ACCOUNT_OWNER)))) {
- account = a;
- break;
- }
-
- if (account == null) continue;
- FileDataStorageManager storage =
- new FileDataStorageManager(account, getContentResolver());
- if (!storage.fileExists(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PATH))))
- continue;
-
- String path = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_STORAGE_PATH));
- if (path == null || path.length() <= 0)
- continue;
- OwnCloudFileObserver observer =
- new OwnCloudFileObserver( path,
- account,
- getApplicationContext());
- mObserversMap.put(path, observer);
- if (new File(path).exists()) {
- observer.startWatching();
- Log_OC.d(TAG, "Started watching file " + path);
- }
-
- } while (c.moveToNext());
- c.close();
- }
-
-
- /**
- * Registers the local copy of a remote file to be observed for local changes,
- * an automatically updated in the ownCloud server.
- *
- * This method does NOT perform a {@link SynchronizeFileOperation} over the file.
- *
- * TODO We are ignoring that, currently, a local file can be linked to different files
- * in ownCloud if it's uploaded several times. That's something pending to update: we
- * will avoid that the same local file is linked to different remote files.
- *
- * @param file Object representing a remote file which local copy must be observed.
- * @param account OwnCloud account containing file.
- */
- private void addObservedFile(OCFile file, Account account) {
- if (file == null) {
- Log_OC.e(TAG, "Trying to add a NULL file to observer");
- return;
- }
- String localPath = file.getStoragePath();
- if (localPath == null || localPath.length() <= 0) { // file downloading / to be download for the first time
- localPath = FileStorageUtils.getDefaultSavePathFor(account.name, file);
- }
- OwnCloudFileObserver observer = mObserversMap.get(localPath);
- if (observer == null) {
- /// the local file was never registered to observe before
- observer = new OwnCloudFileObserver( localPath,
- account,
- getApplicationContext());
- mObserversMap.put(localPath, observer);
- Log_OC.d(TAG, "Observer added for path " + localPath);
-
- if (file.isDown()) {
- observer.startWatching();
- Log_OC.d(TAG, "Started watching " + localPath);
- } // else - the observance can't be started on a file not already down; mDownloadReceiver will get noticed when the download of the file finishes
- }
-
- }
-
-
- /**
- * Unregisters the local copy of a remote file to be observed for local changes.
- *
- * Starts to watch it, if the file has a local copy to watch.
- *
- * TODO We are ignoring that, currently, a local file can be linked to different files
- * in ownCloud if it's uploaded several times. That's something pending to update: we
- * will avoid that the same local file is linked to different remote files.
- *
- * @param file Object representing a remote file which local copy must be not observed longer.
- * @param account OwnCloud account containing file.
- */
- private void removeObservedFile(OCFile file, Account account) {
- if (file == null) {
- Log_OC.e(TAG, "Trying to remove a NULL file");
- return;
- }
- String localPath = file.getStoragePath();
- if (localPath == null || localPath.length() <= 0) {
- localPath = FileStorageUtils.getDefaultSavePathFor(account.name, file);
- }
-
- OwnCloudFileObserver observer = mObserversMap.get(localPath);
- if (observer != null) {
- observer.stopWatching();
- mObserversMap.remove(observer);
- Log_OC.d(TAG, "Stopped watching " + localPath);
- }
-
- }
-
-
- /**
- * Private receiver listening to events broadcast by the FileDownloader service.
- *
- * Starts and stops the observance on registered files when they are being download,
- * in order to avoid to start unnecessary synchronizations.
- */
- private class DownloadCompletedReceiverBis extends BroadcastReceiver {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String downloadPath = intent.getStringExtra(FileDownloader.EXTRA_FILE_PATH);
- OwnCloudFileObserver observer = mObserversMap.get(downloadPath);
- if (observer != null) {
- if (intent.getAction().equals(FileDownloader.getDownloadFinishMessage()) &&
- new File(downloadPath).exists()) { // the download could be successful. not; in both cases, the file could be down, due to a former download or upload
- observer.startWatching();
- Log_OC.d(TAG, "Watching again " + downloadPath);
-
- } else if (intent.getAction().equals(FileDownloader.getDownloadAddedMessage())) {
- observer.stopWatching();
- Log_OC.d(TAG, "Disabling observance of " + downloadPath);
- }
- }
- }
-
- }
-
-}
diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java
index 7f45b6b9ab..ad2a2cbe44 100644
--- a/src/com/owncloud/android/files/services/FileUploader.java
+++ b/src/com/owncloud/android/files/services/FileUploader.java
@@ -28,45 +28,9 @@ import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import org.apache.http.HttpStatus;
-import org.apache.jackrabbit.webdav.DavConstants;
-import org.apache.jackrabbit.webdav.MultiStatus;
-import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
-
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.MainApp;
-import com.owncloud.android.R;
-import com.owncloud.android.authentication.AccountAuthenticator;
-import com.owncloud.android.authentication.AuthenticatorActivity;
-import com.owncloud.android.datamodel.FileDataStorageManager;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.db.DbHandler;
-import com.owncloud.android.network.OwnCloudClientUtils;
-import com.owncloud.android.operations.ChunkedUploadFileOperation;
-import com.owncloud.android.operations.CreateFolderOperation;
-import com.owncloud.android.operations.ExistenceCheckOperation;
-import com.owncloud.android.operations.RemoteOperation;
-import com.owncloud.android.operations.RemoteOperationResult;
-import com.owncloud.android.operations.UploadFileOperation;
-import com.owncloud.android.operations.RemoteOperationResult.ResultCode;
-import com.owncloud.android.ui.activity.FailedUploadActivity;
-import com.owncloud.android.ui.activity.FileActivity;
-import com.owncloud.android.ui.activity.FileDisplayActivity;
-import com.owncloud.android.ui.activity.InstantUploadActivity;
-import com.owncloud.android.ui.preview.PreviewImageActivity;
-import com.owncloud.android.ui.preview.PreviewImageFragment;
-import com.owncloud.android.utils.OwnCloudVersion;
-
-
-import eu.alefzero.webdav.OnDatatransferProgressListener;
-import eu.alefzero.webdav.WebdavEntry;
-import eu.alefzero.webdav.WebdavUtils;
-
-
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountsException;
-import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
@@ -78,11 +42,39 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
+import android.support.v4.app.NotificationCompat;
import android.webkit.MimeTypeMap;
-import android.widget.RemoteViews;
+
+import com.owncloud.android.R;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.authentication.AuthenticatorActivity;
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.db.DbHandler;
+import com.owncloud.android.lib.common.OwnCloudAccount;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
+import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
+import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
+import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
+import com.owncloud.android.lib.resources.files.RemoteFile;
+import com.owncloud.android.lib.resources.status.OwnCloudVersion;
+import com.owncloud.android.notifications.NotificationBuilderWithProgressBar;
+import com.owncloud.android.notifications.NotificationDelayer;
+import com.owncloud.android.operations.CreateFolderOperation;
+import com.owncloud.android.operations.UploadFileOperation;
+import com.owncloud.android.operations.common.SyncOperation;
+import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.ui.activity.FileDisplayActivity;
+import com.owncloud.android.utils.ErrorMessageAdapter;
-import eu.alefzero.webdav.WebdavClient;
public class FileUploader extends Service implements OnDatatransferProgressListener {
@@ -117,7 +109,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
private Looper mServiceLooper;
private ServiceHandler mServiceHandler;
private IBinder mBinder;
- private WebdavClient mUploadClient = null;
+ private OwnCloudClient mUploadClient = null;
private Account mLastAccount = null;
private FileDataStorageManager mStorageManager;
@@ -125,9 +117,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
private UploadFileOperation mCurrentUpload = null;
private NotificationManager mNotificationManager;
- private Notification mNotification;
+ private NotificationCompat.Builder mNotificationBuilder;
private int mLastPercent;
- private RemoteViews mDefaultNotificationContentView;
public static String getUploadFinishMessage() {
@@ -195,6 +186,9 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
return Service.START_NOT_STICKY;
}
Account account = intent.getParcelableExtra(KEY_ACCOUNT);
+ if (!AccountUtils.exists(account, getApplicationContext())) {
+ return Service.START_NOT_STICKY;
+ }
String[] localPaths = null, remotePaths = null, mimeTypes = null;
OCFile[] files = null;
@@ -255,14 +249,16 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
files[i] = obtainNewOCFileToUpload(remotePaths[i], localPaths[i], ((mimeTypes != null) ? mimeTypes[i]
: (String) null), storageManager);
if (files[i] == null) {
- // TODO @andomaex add failure Notiification
+ // TODO @andomaex add failure Notification
return Service.START_NOT_STICKY;
}
}
}
- OwnCloudVersion ocv = new OwnCloudVersion(AccountManager.get(this).getUserData(account,
- AccountAuthenticator.KEY_OC_VERSION));
+ AccountManager aMgr = AccountManager.get(this);
+ String version = aMgr.getUserData(account, Constants.KEY_OC_VERSION);
+ OwnCloudVersion ocv = new OwnCloudVersion(version);
+
boolean chunked = FileUploader.chunkedUploadIsSupported(ocv);
AbstractList requestedUploads = new Vector();
String uploadKey = null;
@@ -270,12 +266,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
try {
for (int i = 0; i < files.length; i++) {
uploadKey = buildRemoteName(account, files[i].getRemotePath());
- if (chunked) {
- newUpload = new ChunkedUploadFileOperation(account, files[i], isInstant, forceOverwrite,
- localAction);
- } else {
- newUpload = new UploadFileOperation(account, files[i], isInstant, forceOverwrite, localAction);
- }
+ newUpload = new UploadFileOperation(account, files[i], chunked, isInstant, forceOverwrite, localAction,
+ getApplicationContext());
if (isInstant) {
newUpload.setRemoteFolderToBeCreated();
}
@@ -430,12 +422,6 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
}
- @Override
- public void onTransferProgress(long progressRate) {
- // old way, should not be in use any more
- }
-
-
@Override
public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer,
String fileName) {
@@ -503,8 +489,11 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
/// prepare client object to send requests to the ownCloud server
if (mUploadClient == null || !mLastAccount.equals(mCurrentUpload.getAccount())) {
mLastAccount = mCurrentUpload.getAccount();
- mStorageManager = new FileDataStorageManager(mLastAccount, getContentResolver());
- mUploadClient = OwnCloudClientUtils.createOwnCloudClient(mLastAccount, getApplicationContext());
+ mStorageManager =
+ new FileDataStorageManager(mLastAccount, getContentResolver());
+ OwnCloudAccount ocAccount = new OwnCloudAccount(mLastAccount, this);
+ mUploadClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+ getClientFor(ocAccount, this);
}
/// check the existence of the parent folder for the file to upload
@@ -564,13 +553,11 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
* @return An {@link OCFile} instance corresponding to the folder where the file will be uploaded.
*/
private RemoteOperationResult grantFolderExistence(String pathToGrant) {
- RemoteOperation operation = new ExistenceCheckOperation(pathToGrant, this, false);
+ RemoteOperation operation = new ExistenceCheckRemoteOperation(pathToGrant, this, false);
RemoteOperationResult result = operation.execute(mUploadClient);
if (!result.isSuccess() && result.getCode() == ResultCode.FILE_NOT_FOUND && mCurrentUpload.isRemoteFolderToBeCreated()) {
- operation = new CreateFolderOperation( pathToGrant,
- true,
- mStorageManager );
- result = operation.execute(mUploadClient);
+ SyncOperation syncOp = new CreateFolderOperation( pathToGrant, true);
+ result = syncOp.execute(mUploadClient, mStorageManager);
}
if (result.isSuccess()) {
OCFile parentDir = mStorageManager.getFileByPath(pathToGrant);
@@ -616,43 +603,21 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
*/
private void saveUploadedFile() {
OCFile file = mCurrentUpload.getFile();
+ if (file.fileExists()) {
+ file = mStorageManager.getFileById(file.getFileId());
+ }
long syncDate = System.currentTimeMillis();
file.setLastSyncDateForData(syncDate);
- // / new PROPFIND to keep data consistent with server in theory, should
- // return the same we already have
- PropFindMethod propfind = null;
- RemoteOperationResult result = null;
- try {
- propfind = new PropFindMethod(mUploadClient.getBaseUri() + WebdavUtils.encodePath(mCurrentUpload.getRemotePath()),
- DavConstants.PROPFIND_ALL_PROP,
- DavConstants.DEPTH_0);
- int status = mUploadClient.executeMethod(propfind);
- boolean isMultiStatus = (status == HttpStatus.SC_MULTI_STATUS);
- if (isMultiStatus) {
- MultiStatus resp = propfind.getResponseBodyAsMultiStatus();
- WebdavEntry we = new WebdavEntry(resp.getResponses()[0], mUploadClient.getBaseUri().getPath());
- updateOCFile(file, we);
- file.setLastSyncDateForProperties(syncDate);
-
- } else {
- mUploadClient.exhaustResponse(propfind.getResponseBodyAsStream());
- }
-
- result = new RemoteOperationResult(isMultiStatus, status, propfind.getResponseHeaders());
- Log_OC.i(TAG, "Update: synchronizing properties for uploaded " + mCurrentUpload.getRemotePath() + ": "
- + result.getLogMessage());
-
- } catch (Exception e) {
- result = new RemoteOperationResult(e);
- Log_OC.e(TAG, "Update: synchronizing properties for uploaded " + mCurrentUpload.getRemotePath() + ": "
- + result.getLogMessage(), e);
-
- } finally {
- if (propfind != null)
- propfind.releaseConnection();
+ // new PROPFIND to keep data consistent with server
+ // in theory, should return the same we already have
+ ReadRemoteFileOperation operation = new ReadRemoteFileOperation(mCurrentUpload.getRemotePath());
+ RemoteOperationResult result = operation.execute(mUploadClient);
+ if (result.isSuccess()) {
+ updateOCFile(file, (RemoteFile) result.getData().get(0));
+ file.setLastSyncDateForProperties(syncDate);
}
-
+
// / maybe this would be better as part of UploadFileOperation... or
// maybe all this method
if (mCurrentUpload.wasRenamed()) {
@@ -665,17 +630,18 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
// coincidence; nothing else is needed, the storagePath is right
// in the instance returned by mCurrentUpload.getFile()
}
-
+ file.setNeedsUpdateThumbnail(true);
mStorageManager.saveFile(file);
}
- private void updateOCFile(OCFile file, WebdavEntry we) {
- file.setCreationTimestamp(we.createTimestamp());
- file.setFileLength(we.contentLength());
- file.setMimetype(we.contentType());
- file.setModificationTimestamp(we.modifiedTimestamp());
- file.setModificationTimestampAtLastSyncForData(we.modifiedTimestamp());
- // file.setEtag(mCurrentUpload.getEtag()); // TODO Etag, where available
+ private void updateOCFile(OCFile file, RemoteFile remoteFile) {
+ file.setCreationTimestamp(remoteFile.getCreationTimestamp());
+ file.setFileLength(remoteFile.getLength());
+ file.setMimetype(remoteFile.getMimeType());
+ file.setModificationTimestamp(remoteFile.getModifiedTimestamp());
+ file.setModificationTimestampAtLastSyncForData(remoteFile.getModifiedTimestamp());
+ // file.setEtag(remoteFile.getEtag()); // TODO Etag, where available
+ file.setRemoteId(remoteFile.getRemoteId());
}
private OCFile obtainNewOCFileToUpload(String remotePath, String localPath, String mimeType,
@@ -715,172 +681,129 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
*
* @param upload Upload operation starting.
*/
- @SuppressWarnings("deprecation")
private void notifyUploadStart(UploadFileOperation upload) {
// / create status notification with a progress bar
mLastPercent = 0;
- mNotification = new Notification(R.drawable.icon, getString(R.string.uploader_upload_in_progress_ticker),
- System.currentTimeMillis());
- mNotification.flags |= Notification.FLAG_ONGOING_EVENT;
- mDefaultNotificationContentView = mNotification.contentView;
- mNotification.contentView = new RemoteViews(getApplicationContext().getPackageName(),
- R.layout.progressbar_layout);
- mNotification.contentView.setProgressBar(R.id.status_progress, 100, 0, false);
- mNotification.contentView.setTextViewText(R.id.status_text,
- String.format(getString(R.string.uploader_upload_in_progress_content), 0, upload.getFileName()));
- mNotification.contentView.setImageViewResource(R.id.status_icon, R.drawable.icon);
-
+ mNotificationBuilder =
+ NotificationBuilderWithProgressBar.newNotificationBuilderWithProgressBar(this);
+ mNotificationBuilder
+ .setOngoing(true)
+ .setSmallIcon(R.drawable.notification_icon)
+ .setTicker(getString(R.string.uploader_upload_in_progress_ticker))
+ .setContentTitle(getString(R.string.uploader_upload_in_progress_ticker))
+ .setProgress(100, 0, false)
+ .setContentText(
+ String.format(getString(R.string.uploader_upload_in_progress_content), 0, upload.getFileName()));
+
/// includes a pending intent in the notification showing the details view of the file
Intent showDetailsIntent = new Intent(this, FileDisplayActivity.class);
showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, upload.getFile());
showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, upload.getAccount());
showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(),
- (int) System.currentTimeMillis(), showDetailsIntent, 0);
+ mNotificationBuilder.setContentIntent(PendingIntent.getActivity(
+ this, (int) System.currentTimeMillis(), showDetailsIntent, 0
+ ));
- mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotification);
+ mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotificationBuilder.build());
}
/**
* Callback method to update the progress bar in the status notification
*/
@Override
- public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String fileName) {
+ public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filePath) {
int percent = (int) (100.0 * ((double) totalTransferredSoFar) / ((double) totalToTransfer));
if (percent != mLastPercent) {
- mNotification.contentView.setProgressBar(R.id.status_progress, 100, percent, false);
+ mNotificationBuilder.setProgress(100, percent, false);
+ String fileName = filePath.substring(filePath.lastIndexOf(FileUtils.PATH_SEPARATOR) + 1);
String text = String.format(getString(R.string.uploader_upload_in_progress_content), percent, fileName);
- mNotification.contentView.setTextViewText(R.id.status_text, text);
- mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotification);
+ mNotificationBuilder.setContentText(text);
+ mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotificationBuilder.build());
}
mLastPercent = percent;
}
- /**
- * Callback method to update the progress bar in the status notification
- * (old version)
- */
- @Override
- public void onTransferProgress(long progressRate) {
- // NOTHING TO DO HERE ANYMORE
- }
-
/**
* Updates the status notification with the result of an upload operation.
*
* @param uploadResult Result of the upload operation.
* @param upload Finished upload operation
*/
- private void notifyUploadResult(RemoteOperationResult uploadResult, UploadFileOperation upload) {
+ private void notifyUploadResult(
+ RemoteOperationResult uploadResult, UploadFileOperation upload) {
Log_OC.d(TAG, "NotifyUploadResult with resultCode: " + uploadResult.getCode());
- if (uploadResult.isCancelled()) {
- // / cancelled operation -> silent removal of progress notification
- mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
-
- } else if (uploadResult.isSuccess()) {
- // / success -> silent update of progress notification to success
- // message
- mNotification.flags ^= Notification.FLAG_ONGOING_EVENT; // remove
- // the
- // ongoing
- // flag
- mNotification.flags |= Notification.FLAG_AUTO_CANCEL;
- mNotification.contentView = mDefaultNotificationContentView;
+ // / cancelled operation or success -> silent removal of progress notification
+ mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
+
+ // Show the result: success or fail notification
+ if (!uploadResult.isCancelled()) {
+ int tickerId = (uploadResult.isSuccess()) ? R.string.uploader_upload_succeeded_ticker :
+ R.string.uploader_upload_failed_ticker;
- /// includes a pending intent in the notification showing the details view of the file
- Intent showDetailsIntent = null;
- if (PreviewImageFragment.canBePreviewed(upload.getFile())) {
- showDetailsIntent = new Intent(this, PreviewImageActivity.class);
- } else {
- showDetailsIntent = new Intent(this, FileDisplayActivity.class);
- }
- showDetailsIntent.putExtra(FileActivity.EXTRA_FILE, upload.getFile());
- showDetailsIntent.putExtra(FileActivity.EXTRA_ACCOUNT, upload.getAccount());
- showDetailsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(),
- (int) System.currentTimeMillis(), showDetailsIntent, 0);
-
- mNotification.setLatestEventInfo(getApplicationContext(),
- getString(R.string.uploader_upload_succeeded_ticker),
- String.format(getString(R.string.uploader_upload_succeeded_content_single), upload.getFileName()),
- mNotification.contentIntent);
-
- mNotificationManager.notify(R.string.uploader_upload_in_progress_ticker, mNotification); // NOT
- // AN
- DbHandler db = new DbHandler(this.getBaseContext());
- db.removeIUPendingFile(mCurrentUpload.getOriginalStoragePath());
- db.close();
-
- } else {
-
- // / fail -> explicit failure notification
- mNotificationManager.cancel(R.string.uploader_upload_in_progress_ticker);
- Notification finalNotification = new Notification(R.drawable.icon,
- getString(R.string.uploader_upload_failed_ticker), System.currentTimeMillis());
- finalNotification.flags |= Notification.FLAG_AUTO_CANCEL;
String content = null;
+
+ // check credentials error
+ boolean needsToUpdateCredentials = (
+ uploadResult.getCode() == ResultCode.UNAUTHORIZED ||
+ uploadResult.isIdPRedirection()
+ );
+ tickerId = (needsToUpdateCredentials) ?
+ R.string.uploader_upload_failed_credentials_error : tickerId;
+
+ mNotificationBuilder
+ .setTicker(getString(tickerId))
+ .setContentTitle(getString(tickerId))
+ .setAutoCancel(true)
+ .setOngoing(false)
+ .setProgress(0, 0, false);
+
+ content = ErrorMessageAdapter.getErrorCauseMessage(
+ uploadResult, upload, getResources()
+ );
- boolean needsToUpdateCredentials = (uploadResult.getCode() == ResultCode.UNAUTHORIZED ||
- //(uploadResult.isTemporalRedirection() && uploadResult.isIdPRedirection() &&
- (uploadResult.isIdPRedirection() &&
- MainApp.getAuthTokenTypeSamlSessionCookie().equals(mUploadClient.getAuthTokenType())));
if (needsToUpdateCredentials) {
// let the user update credentials with one click
Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACCOUNT, upload.getAccount());
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ENFORCED_UPDATE, true);
- updateAccountCredentials.putExtra(AuthenticatorActivity.EXTRA_ACTION, AuthenticatorActivity.ACTION_UPDATE_TOKEN);
+ updateAccountCredentials.putExtra(
+ AuthenticatorActivity.EXTRA_ACCOUNT, upload.getAccount()
+ );
+ updateAccountCredentials.putExtra(
+ AuthenticatorActivity.EXTRA_ACTION,
+ AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN
+ );
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
updateAccountCredentials.addFlags(Intent.FLAG_FROM_BACKGROUND);
- finalNotification.contentIntent = PendingIntent.getActivity(this, (int)System.currentTimeMillis(), updateAccountCredentials, PendingIntent.FLAG_ONE_SHOT);
- content = String.format(getString(R.string.uploader_upload_failed_content_single), upload.getFileName());
- finalNotification.setLatestEventInfo(getApplicationContext(),
- getString(R.string.uploader_upload_failed_ticker), content, finalNotification.contentIntent);
- mUploadClient = null; // grant that future retries on the same account will get the fresh credentials
+ mNotificationBuilder.setContentIntent(PendingIntent.getActivity(
+ this,
+ (int) System.currentTimeMillis(),
+ updateAccountCredentials,
+ PendingIntent.FLAG_ONE_SHOT
+ ));
+
+ mUploadClient = null;
+ // grant that future retries on the same account will get the fresh credentials
} else {
- // TODO put something smart in the contentIntent below
- // finalNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(), (int)System.currentTimeMillis(), new Intent(), 0);
- //}
-
- if (uploadResult.getCode() == ResultCode.LOCAL_STORAGE_FULL
- || uploadResult.getCode() == ResultCode.LOCAL_STORAGE_NOT_COPIED) {
- // TODO we need a class to provide error messages for the users
- // from a RemoteOperationResult and a RemoteOperation
- content = String.format(getString(R.string.error__upload__local_file_not_copied), upload.getFileName(),
- getString(R.string.app_name));
- } else if (uploadResult.getCode() == ResultCode.QUOTA_EXCEEDED) {
- content = getString(R.string.failed_upload_quota_exceeded_text);
- } else {
- content = String
- .format(getString(R.string.uploader_upload_failed_content_single), upload.getFileName());
- }
-
- // we add only for instant-uploads the InstantUploadActivity and the
- // db entry
- Intent detailUploadIntent = null;
- if (upload.isInstant() && InstantUploadActivity.IS_ENABLED) {
- detailUploadIntent = new Intent(this, InstantUploadActivity.class);
- detailUploadIntent.putExtra(FileUploader.KEY_ACCOUNT, upload.getAccount());
- } else {
- detailUploadIntent = new Intent(this, FailedUploadActivity.class);
- detailUploadIntent.putExtra(FailedUploadActivity.MESSAGE, content);
- }
- finalNotification.contentIntent = PendingIntent.getActivity(getApplicationContext(),
- (int) System.currentTimeMillis(), detailUploadIntent, PendingIntent.FLAG_UPDATE_CURRENT
- | PendingIntent.FLAG_ONE_SHOT);
-
+ mNotificationBuilder.setContentText(content);
+
if (upload.isInstant()) {
DbHandler db = null;
try {
db = new DbHandler(this.getBaseContext());
- String message = uploadResult.getLogMessage() + " errorCode: " + uploadResult.getCode();
+ String message = uploadResult.getLogMessage() + " errorCode: " +
+ uploadResult.getCode();
Log_OC.e(TAG, message + " Http-Code: " + uploadResult.getHttpCode());
if (uploadResult.getCode() == ResultCode.QUOTA_EXCEEDED) {
- message = getString(R.string.failed_upload_quota_exceeded_text);
- if (db.updateFileState(upload.getOriginalStoragePath(), DbHandler.UPLOAD_STATUS_UPLOAD_FAILED,
+ //message = getString(R.string.failed_upload_quota_exceeded_text);
+ if (db.updateFileState(
+ upload.getOriginalStoragePath(),
+ DbHandler.UPLOAD_STATUS_UPLOAD_FAILED,
message) == 0) {
- db.putFileForLater(upload.getOriginalStoragePath(), upload.getAccount().name, message);
+ db.putFileForLater(
+ upload.getOriginalStoragePath(),
+ upload.getAccount().name,
+ message
+ );
}
}
} finally {
@@ -890,12 +813,24 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
}
}
}
- finalNotification.setLatestEventInfo(getApplicationContext(),
- getString(R.string.uploader_upload_failed_ticker), content, finalNotification.contentIntent);
- mNotificationManager.notify(R.string.uploader_upload_failed_ticker, finalNotification);
- }
+ mNotificationBuilder.setContentText(content);
+ mNotificationManager.notify(tickerId, mNotificationBuilder.build());
+
+ if (uploadResult.isSuccess()) {
+
+ DbHandler db = new DbHandler(this.getBaseContext());
+ db.removeIUPendingFile(mCurrentUpload.getOriginalStoragePath());
+ db.close();
+ // remove success notification, with a delay of 2 seconds
+ NotificationDelayer.cancelWithDelay(
+ mNotificationManager,
+ R.string.uploader_upload_succeeded_ticker,
+ 2000);
+
+ }
+ }
}
/**
diff --git a/src/com/owncloud/android/media/MediaService.java b/src/com/owncloud/android/media/MediaService.java
index eb57222cb7..52daa04c2a 100644
--- a/src/com/owncloud/android/media/MediaService.java
+++ b/src/com/owncloud/android/media/MediaService.java
@@ -37,9 +37,9 @@ import android.widget.Toast;
import java.io.IOException;
-import com.owncloud.android.Log_OC;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.activity.FileActivity;
import com.owncloud.android.ui.activity.FileDisplayActivity;
@@ -218,6 +218,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
*/
@Override
public void onCreate() {
+ super.onCreate();
Log_OC.d(TAG, "Creating ownCloud media service");
mWifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)).
@@ -637,6 +638,7 @@ public class MediaService extends Service implements OnCompletionListener, OnPre
mState = State.STOPPED;
releaseResources(true);
giveUpAudioFocus();
+ super.onDestroy();
}
diff --git a/src/com/owncloud/android/media/MediaServiceBinder.java b/src/com/owncloud/android/media/MediaServiceBinder.java
index ab018f67c5..1b56ec016a 100644
--- a/src/com/owncloud/android/media/MediaServiceBinder.java
+++ b/src/com/owncloud/android/media/MediaServiceBinder.java
@@ -18,8 +18,8 @@
package com.owncloud.android.media;
-import com.owncloud.android.Log_OC;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.media.MediaService.State;
import android.accounts.Account;
diff --git a/src/com/owncloud/android/network/AdvancedSslSocketFactory.java b/src/com/owncloud/android/network/AdvancedSslSocketFactory.java
deleted file mode 100644
index 6a698713a4..0000000000
--- a/src/com/owncloud/android/network/AdvancedSslSocketFactory.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.network;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketAddress;
-import java.net.UnknownHostException;
-import java.security.cert.X509Certificate;
-
-import javax.net.SocketFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLHandshakeException;
-import javax.net.ssl.SSLPeerUnverifiedException;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSocket;
-
-import org.apache.commons.httpclient.ConnectTimeoutException;
-import org.apache.commons.httpclient.params.HttpConnectionParams;
-import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-
-import com.owncloud.android.Log_OC;
-
-
-/**
- * AdvancedSSLProtocolSocketFactory allows to create SSL {@link Socket}s with
- * a custom SSLContext and an optional Hostname Verifier.
- *
- * @author David A. Velasco
- */
-
-public class AdvancedSslSocketFactory implements ProtocolSocketFactory {
-
- private static final String TAG = AdvancedSslSocketFactory.class.getSimpleName();
-
- private SSLContext mSslContext = null;
- private AdvancedX509TrustManager mTrustManager = null;
- private X509HostnameVerifier mHostnameVerifier = null;
-
- public SSLContext getSslContext() {
- return mSslContext;
- }
-
- /**
- * Constructor for AdvancedSSLProtocolSocketFactory.
- */
- public AdvancedSslSocketFactory(SSLContext sslContext, AdvancedX509TrustManager trustManager, X509HostnameVerifier hostnameVerifier) {
- if (sslContext == null)
- throw new IllegalArgumentException("AdvancedSslSocketFactory can not be created with a null SSLContext");
- if (trustManager == null)
- throw new IllegalArgumentException("AdvancedSslSocketFactory can not be created with a null Trust Manager");
- mSslContext = sslContext;
- mTrustManager = trustManager;
- mHostnameVerifier = hostnameVerifier;
- }
-
- /**
- * @see ProtocolSocketFactory#createSocket(java.lang.String,int,java.net.InetAddress,int)
- */
- public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException, UnknownHostException {
- Socket socket = mSslContext.getSocketFactory().createSocket(host, port, clientHost, clientPort);
- verifyPeerIdentity(host, port, socket);
- return socket;
- }
-
-
- /**
- * Attempts to get a new socket connection to the given host within the
- * given time limit.
- *
- * @param host the host name/IP
- * @param port the port on the host
- * @param clientHost the local host name/IP to bind the socket to
- * @param clientPort the port on the local machine
- * @param params {@link HttpConnectionParams Http connection parameters}
- *
- * @return Socket a new socket
- *
- * @throws IOException if an I/O error occurs while creating the socket
- * @throws UnknownHostException if the IP address of the host cannot be
- * determined
- */
- public Socket createSocket(final String host, final int port,
- final InetAddress localAddress, final int localPort,
- final HttpConnectionParams params) throws IOException,
- UnknownHostException, ConnectTimeoutException {
- Log_OC.d(TAG, "Creating SSL Socket with remote " + host + ":" + port + ", local " + localAddress + ":" + localPort + ", params: " + params);
- if (params == null) {
- throw new IllegalArgumentException("Parameters may not be null");
- }
- int timeout = params.getConnectionTimeout();
- SocketFactory socketfactory = mSslContext.getSocketFactory();
- Log_OC.d(TAG, " ... with connection timeout " + timeout + " and socket timeout " + params.getSoTimeout());
- Socket socket = socketfactory.createSocket();
- SocketAddress localaddr = new InetSocketAddress(localAddress, localPort);
- SocketAddress remoteaddr = new InetSocketAddress(host, port);
- socket.setSoTimeout(params.getSoTimeout());
- socket.bind(localaddr);
- socket.connect(remoteaddr, timeout);
- verifyPeerIdentity(host, port, socket);
- return socket;
- }
-
- /**
- * @see ProtocolSocketFactory#createSocket(java.lang.String,int)
- */
- public Socket createSocket(String host, int port) throws IOException,
- UnknownHostException {
- Log_OC.d(TAG, "Creating SSL Socket with remote " + host + ":" + port);
- Socket socket = mSslContext.getSocketFactory().createSocket(host, port);
- verifyPeerIdentity(host, port, socket);
- return socket;
- }
-
- public boolean equals(Object obj) {
- return ((obj != null) && obj.getClass().equals(
- AdvancedSslSocketFactory.class));
- }
-
- public int hashCode() {
- return AdvancedSslSocketFactory.class.hashCode();
- }
-
-
- public X509HostnameVerifier getHostNameVerifier() {
- return mHostnameVerifier;
- }
-
-
- public void setHostNameVerifier(X509HostnameVerifier hostnameVerifier) {
- mHostnameVerifier = hostnameVerifier;
- }
-
- /**
- * Verifies the identity of the server.
- *
- * The server certificate is verified first.
- *
- * Then, the host name is compared with the content of the server certificate using the current host name verifier, if any.
- * @param socket
- */
- private void verifyPeerIdentity(String host, int port, Socket socket) throws IOException {
- try {
- CertificateCombinedException failInHandshake = null;
- /// 1. VERIFY THE SERVER CERTIFICATE through the registered TrustManager (that should be an instance of AdvancedX509TrustManager)
- try {
- SSLSocket sock = (SSLSocket) socket; // a new SSLSession instance is created as a "side effect"
- sock.startHandshake();
-
- } catch (RuntimeException e) {
-
- if (e instanceof CertificateCombinedException) {
- failInHandshake = (CertificateCombinedException) e;
- } else {
- Throwable cause = e.getCause();
- Throwable previousCause = null;
- while (cause != null && cause != previousCause && !(cause instanceof CertificateCombinedException)) {
- previousCause = cause;
- cause = cause.getCause();
- }
- if (cause != null && cause instanceof CertificateCombinedException) {
- failInHandshake = (CertificateCombinedException)cause;
- }
- }
- if (failInHandshake == null) {
- throw e;
- }
- failInHandshake.setHostInUrl(host);
-
- }
-
- /// 2. VERIFY HOSTNAME
- SSLSession newSession = null;
- boolean verifiedHostname = true;
- if (mHostnameVerifier != null) {
- if (failInHandshake != null) {
- /// 2.1 : a new SSLSession instance was NOT created in the handshake
- X509Certificate serverCert = failInHandshake.getServerCertificate();
- try {
- mHostnameVerifier.verify(host, serverCert);
- } catch (SSLException e) {
- verifiedHostname = false;
- }
-
- } else {
- /// 2.2 : a new SSLSession instance was created in the handshake
- newSession = ((SSLSocket)socket).getSession();
- if (!mTrustManager.isKnownServer((X509Certificate)(newSession.getPeerCertificates()[0]))) {
- verifiedHostname = mHostnameVerifier.verify(host, newSession);
- }
- }
- }
-
- /// 3. Combine the exceptions to throw, if any
- if (!verifiedHostname) {
- SSLPeerUnverifiedException pue = new SSLPeerUnverifiedException("Names in the server certificate do not match to " + host + " in the URL");
- if (failInHandshake == null) {
- failInHandshake = new CertificateCombinedException((X509Certificate) newSession.getPeerCertificates()[0]);
- failInHandshake.setHostInUrl(host);
- }
- failInHandshake.setSslPeerUnverifiedException(pue);
- pue.initCause(failInHandshake);
- throw pue;
-
- } else if (failInHandshake != null) {
- SSLHandshakeException hse = new SSLHandshakeException("Server certificate could not be verified");
- hse.initCause(failInHandshake);
- throw hse;
- }
-
- } catch (IOException io) {
- try {
- socket.close();
- } catch (Exception x) {
- // NOTHING - irrelevant exception for the caller
- }
- throw io;
- }
- }
-
-}
diff --git a/src/com/owncloud/android/network/AdvancedX509TrustManager.java b/src/com/owncloud/android/network/AdvancedX509TrustManager.java
deleted file mode 100644
index 81dcdbd732..0000000000
--- a/src/com/owncloud/android/network/AdvancedX509TrustManager.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.network;
-
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertStoreException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-import com.owncloud.android.Log_OC;
-
-
-/**
- * @author David A. Velasco
- */
-public class AdvancedX509TrustManager implements X509TrustManager {
-
- private static final String TAG = AdvancedX509TrustManager.class.getSimpleName();
-
- private X509TrustManager mStandardTrustManager = null;
- private KeyStore mKnownServersKeyStore;
-
- /**
- * Constructor for AdvancedX509TrustManager
- *
- * @param knownServersCertStore Local certificates store with server certificates explicitly trusted by the user.
- * @throws CertStoreException When no default X509TrustManager instance was found in the system.
- */
- public AdvancedX509TrustManager(KeyStore knownServersKeyStore)
- throws NoSuchAlgorithmException, KeyStoreException, CertStoreException {
- super();
- TrustManagerFactory factory = TrustManagerFactory
- .getInstance(TrustManagerFactory.getDefaultAlgorithm());
- factory.init((KeyStore)null);
- mStandardTrustManager = findX509TrustManager(factory);
-
- mKnownServersKeyStore = knownServersKeyStore;
- }
-
-
- /**
- * Locates the first X509TrustManager provided by a given TrustManagerFactory
- * @param factory TrustManagerFactory to inspect in the search for a X509TrustManager
- * @return The first X509TrustManager found in factory.
- * @throws CertStoreException When no X509TrustManager instance was found in factory
- */
- private X509TrustManager findX509TrustManager(TrustManagerFactory factory) throws CertStoreException {
- TrustManager tms[] = factory.getTrustManagers();
- for (int i = 0; i < tms.length; i++) {
- if (tms[i] instanceof X509TrustManager) {
- return (X509TrustManager) tms[i];
- }
- }
- return null;
- }
-
-
- /**
- * @see javax.net.ssl.X509TrustManager#checkClientTrusted(X509Certificate[],
- * String authType)
- */
- public void checkClientTrusted(X509Certificate[] certificates, String authType) throws CertificateException {
- mStandardTrustManager.checkClientTrusted(certificates, authType);
- }
-
-
- /**
- * @see javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[],
- * String authType)
- */
- public void checkServerTrusted(X509Certificate[] certificates, String authType) throws CertificateException {
- if (!isKnownServer(certificates[0])) {
- CertificateCombinedException result = new CertificateCombinedException(certificates[0]);
- try {
- certificates[0].checkValidity();
- } catch (CertificateExpiredException c) {
- result.setCertificateExpiredException(c);
-
- } catch (CertificateNotYetValidException c) {
- result.setCertificateNotYetException(c);
- }
-
- try {
- mStandardTrustManager.checkServerTrusted(certificates, authType);
- } catch (CertificateException c) {
- Throwable cause = c.getCause();
- Throwable previousCause = null;
- while (cause != null && cause != previousCause && !(cause instanceof CertPathValidatorException)) { // getCause() is not funny
- previousCause = cause;
- cause = cause.getCause();
- }
- if (cause != null && cause instanceof CertPathValidatorException) {
- result.setCertPathValidatorException((CertPathValidatorException)cause);
- } else {
- result.setOtherCertificateException(c);
- }
- }
-
- if (result.isException())
- throw result;
-
- }
- }
-
-
- /**
- * @see javax.net.ssl.X509TrustManager#getAcceptedIssuers()
- */
- public X509Certificate[] getAcceptedIssuers() {
- return mStandardTrustManager.getAcceptedIssuers();
- }
-
-
- public boolean isKnownServer(X509Certificate cert) {
- try {
- return (mKnownServersKeyStore.getCertificateAlias(cert) != null);
- } catch (KeyStoreException e) {
- Log_OC.d(TAG, "Fail while checking certificate in the known-servers store");
- return false;
- }
- }
-
-}
\ No newline at end of file
diff --git a/src/com/owncloud/android/network/BearerAuthScheme.java b/src/com/owncloud/android/network/BearerAuthScheme.java
deleted file mode 100644
index 16791c2330..0000000000
--- a/src/com/owncloud/android/network/BearerAuthScheme.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.network;
-
-import java.util.Map;
-
-import org.apache.commons.httpclient.Credentials;
-import org.apache.commons.httpclient.HttpMethod;
-import org.apache.commons.httpclient.auth.AuthChallengeParser;
-import org.apache.commons.httpclient.auth.AuthScheme;
-import org.apache.commons.httpclient.auth.AuthenticationException;
-import org.apache.commons.httpclient.auth.InvalidCredentialsException;
-import org.apache.commons.httpclient.auth.MalformedChallengeException;
-
-import com.owncloud.android.Log_OC;
-
-
-/**
- * Bearer authentication scheme as defined in RFC 6750.
- *
- * @author David A. Velasco
- */
-
-public class BearerAuthScheme implements AuthScheme /*extends RFC2617Scheme*/ {
-
- private static final String TAG = BearerAuthScheme.class.getSimpleName();
-
- public static final String AUTH_POLICY = "Bearer";
-
- /** Whether the bearer authentication process is complete */
- private boolean mComplete;
-
- /** Authentication parameter map */
- private Map mParams = null;
-
-
- /**
- * Default constructor for the bearer authentication scheme.
- */
- public BearerAuthScheme() {
- mComplete = false;
- }
-
- /**
- * Constructor for the basic authentication scheme.
- *
- * @param challenge Authentication challenge
- *
- * @throws MalformedChallengeException Thrown if the authentication challenge is malformed
- *
- * @deprecated Use parameterless constructor and {@link AuthScheme#processChallenge(String)} method
- */
- public BearerAuthScheme(final String challenge) throws MalformedChallengeException {
- processChallenge(challenge);
- mComplete = true;
- }
-
- /**
- * Returns textual designation of the bearer authentication scheme.
- *
- * @return "Bearer"
- */
- public String getSchemeName() {
- return "bearer";
- }
-
- /**
- * Processes the Bearer challenge.
- *
- * @param challenge The challenge string
- *
- * @throws MalformedChallengeException Thrown if the authentication challenge is malformed
- */
- public void processChallenge(String challenge) throws MalformedChallengeException {
- String s = AuthChallengeParser.extractScheme(challenge);
- if (!s.equalsIgnoreCase(getSchemeName())) {
- throw new MalformedChallengeException(
- "Invalid " + getSchemeName() + " challenge: " + challenge);
- }
- mParams = AuthChallengeParser.extractParams(challenge);
- mComplete = true;
- }
-
- /**
- * Tests if the Bearer authentication process has been completed.
- *
- * @return 'true' if Bearer authorization has been processed, 'false' otherwise.
- */
- public boolean isComplete() {
- return this.mComplete;
- }
-
- /**
- * Produces bearer authorization string for the given set of
- * {@link Credentials}.
- *
- * @param credentials The set of credentials to be used for authentication
- * @param method Method name is ignored by the bearer authentication scheme
- * @param uri URI is ignored by the bearer authentication scheme
- * @throws InvalidCredentialsException If authentication credentials are not valid or not applicable
- * for this authentication scheme
- * @throws AuthenticationException If authorization string cannot be generated due to an authentication failure
- * @return A bearer authorization string
- *
- * @deprecated Use {@link #authenticate(Credentials, HttpMethod)}
- */
- public String authenticate(Credentials credentials, String method, String uri) throws AuthenticationException {
- Log_OC.d(TAG, "enter BearerScheme.authenticate(Credentials, String, String)");
-
- BearerCredentials bearer = null;
- try {
- bearer = (BearerCredentials) credentials;
- } catch (ClassCastException e) {
- throw new InvalidCredentialsException(
- "Credentials cannot be used for bearer authentication: "
- + credentials.getClass().getName());
- }
- return BearerAuthScheme.authenticate(bearer);
- }
-
-
- /**
- * Returns 'false'. Bearer authentication scheme is request based.
- *
- * @return 'false'.
- */
- public boolean isConnectionBased() {
- return false;
- }
-
- /**
- * Produces bearer authorization string for the given set of {@link Credentials}.
- *
- * @param credentials The set of credentials to be used for authentication
- * @param method The method being authenticated
- * @throws InvalidCredentialsException If authentication credentials are not valid or not applicable for this authentication
- * scheme.
- * @throws AuthenticationException If authorization string cannot be generated due to an authentication failure.
- *
- * @return a basic authorization string
- */
- public String authenticate(Credentials credentials, HttpMethod method) throws AuthenticationException {
- Log_OC.d(TAG, "enter BearerScheme.authenticate(Credentials, HttpMethod)");
-
- if (method == null) {
- throw new IllegalArgumentException("Method may not be null");
- }
- BearerCredentials bearer = null;
- try {
- bearer = (BearerCredentials) credentials;
- } catch (ClassCastException e) {
- throw new InvalidCredentialsException(
- "Credentials cannot be used for bearer authentication: "
- + credentials.getClass().getName());
- }
- return BearerAuthScheme.authenticate(
- bearer,
- method.getParams().getCredentialCharset());
- }
-
- /**
- * @deprecated Use {@link #authenticate(BearerCredentials, String)}
- *
- * Returns a bearer Authorization header value for the given
- * {@link BearerCredentials}.
- *
- * @param credentials The credentials to encode.
- *
- * @return A bearer authorization string
- */
- public static String authenticate(BearerCredentials credentials) {
- return authenticate(credentials, "ISO-8859-1");
- }
-
- /**
- * Returns a bearer Authorization header value for the given
- * {@link BearerCredentials} and charset.
- *
- * @param credentials The credentials to encode.
- * @param charset The charset to use for encoding the credentials
- *
- * @return A bearer authorization string
- *
- * @since 3.0
- */
- public static String authenticate(BearerCredentials credentials, String charset) {
- Log_OC.d(TAG, "enter BearerAuthScheme.authenticate(BearerCredentials, String)");
-
- if (credentials == null) {
- throw new IllegalArgumentException("Credentials may not be null");
- }
- if (charset == null || charset.length() == 0) {
- throw new IllegalArgumentException("charset may not be null or empty");
- }
- StringBuffer buffer = new StringBuffer();
- buffer.append(credentials.getAccessToken());
-
- //return "Bearer " + EncodingUtil.getAsciiString(EncodingUtil.getBytes(buffer.toString(), charset));
- return "Bearer " + buffer.toString();
- }
-
- /**
- * Returns a String identifying the authentication challenge. This is
- * used, in combination with the host and port to determine if
- * authorization has already been attempted or not. Schemes which
- * require multiple requests to complete the authentication should
- * return a different value for each stage in the request.
- *
- * Additionally, the ID should take into account any changes to the
- * authentication challenge and return a different value when appropriate.
- * For example when the realm changes in basic authentication it should be
- * considered a different authentication attempt and a different value should
- * be returned.
- *
- * This method simply returns the realm for the challenge.
- *
- * @return String a String identifying the authentication challenge.
- *
- * @deprecated no longer used
- */
- @Override
- public String getID() {
- return getRealm();
- }
-
- /**
- * Returns authentication parameter with the given name, if available.
- *
- * @param name The name of the parameter to be returned
- *
- * @return The parameter with the given name
- */
- @Override
- public String getParameter(String name) {
- if (name == null) {
- throw new IllegalArgumentException("Parameter name may not be null");
- }
- if (mParams == null) {
- return null;
- }
- return (String) mParams.get(name.toLowerCase());
- }
-
- /**
- * Returns authentication realm. The realm may not be null.
- *
- * @return The authentication realm
- */
- @Override
- public String getRealm() {
- return getParameter("realm");
- }
-
-}
diff --git a/src/com/owncloud/android/network/BearerCredentials.java b/src/com/owncloud/android/network/BearerCredentials.java
deleted file mode 100644
index 50799b0215..0000000000
--- a/src/com/owncloud/android/network/BearerCredentials.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.network;
-
-import org.apache.commons.httpclient.Credentials;
-import org.apache.commons.httpclient.util.LangUtils;
-
-/**
- * Bearer token {@link Credentials}
- *
- * @author David A. Velasco
- */
-public class BearerCredentials implements Credentials {
-
-
- private String mAccessToken;
-
-
- /**
- * The constructor with the bearer token
- *
- * @param token The bearer token
- */
- public BearerCredentials(String token) {
- /*if (token == null) {
- throw new IllegalArgumentException("Bearer token may not be null");
- }*/
- mAccessToken = (token == null) ? "" : token;
- }
-
-
- /**
- * Returns the access token
- *
- * @return The access token
- */
- public String getAccessToken() {
- return mAccessToken;
- }
-
-
- /**
- * Get this object string.
- *
- * @return The access token
- */
- public String toString() {
- return mAccessToken;
- }
-
- /**
- * Does a hash of the access token.
- *
- * @return The hash code of the access token
- */
- public int hashCode() {
- int hash = LangUtils.HASH_SEED;
- hash = LangUtils.hashCode(hash, mAccessToken);
- return hash;
- }
-
- /**
- * These credentials are assumed equal if accessToken is the same.
- *
- * @param o The other object to compare with.
- *
- * @return 'True' if the object is equivalent.
- */
- public boolean equals(Object o) {
- if (o == null) return false;
- if (this == o) return true;
- if (this.getClass().equals(o.getClass())) {
- BearerCredentials that = (BearerCredentials) o;
- if (LangUtils.equals(mAccessToken, that.mAccessToken)) {
- return true;
- }
- }
- return false;
- }
-
-}
-
diff --git a/src/com/owncloud/android/network/CertificateCombinedException.java b/src/com/owncloud/android/network/CertificateCombinedException.java
deleted file mode 100644
index e96d9dc6da..0000000000
--- a/src/com/owncloud/android/network/CertificateCombinedException.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.network;
-
-import java.security.cert.CertPathValidatorException;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateExpiredException;
-import java.security.cert.CertificateNotYetValidException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLPeerUnverifiedException;
-
-/**
- * Exception joining all the problems that {@link AdvancedX509TrustManager} can find in
- * a certificate chain for a server.
- *
- * This was initially created as an extension of CertificateException, but some
- * implementations of the SSL socket layer in existing devices are REPLACING the CertificateException
- * instances thrown by {@link javax.net.ssl.X509TrustManager#checkServerTrusted(X509Certificate[], String)}
- * with SSLPeerUnverifiedException FORGETTING THE CAUSING EXCEPTION instead of wrapping it.
- *
- * Due to this, extending RuntimeException is necessary to get that the CertificateCombinedException
- * instance reaches {@link AdvancedSslSocketFactory#verifyPeerIdentity}.
- *
- * BE CAREFUL. As a RuntimeException extensions, Java compilers do not require to handle it
- * in client methods. Be sure to use it only when you know exactly where it will go.
- *
- * @author David A. Velasco
- */
-public class CertificateCombinedException extends RuntimeException {
-
- /** Generated - to refresh every time the class changes */
- private static final long serialVersionUID = -8875782030758554999L;
-
- private X509Certificate mServerCert = null;
- private String mHostInUrl;
-
- private CertificateExpiredException mCertificateExpiredException = null;
- private CertificateNotYetValidException mCertificateNotYetValidException = null;
- private CertPathValidatorException mCertPathValidatorException = null;
- private CertificateException mOtherCertificateException = null;
- private SSLPeerUnverifiedException mSslPeerUnverifiedException = null;
-
- public CertificateCombinedException(X509Certificate x509Certificate) {
- mServerCert = x509Certificate;
- }
-
- public X509Certificate getServerCertificate() {
- return mServerCert;
- }
-
- public String getHostInUrl() {
- return mHostInUrl;
- }
-
- public void setHostInUrl(String host) {
- mHostInUrl = host;
- }
-
- public CertificateExpiredException getCertificateExpiredException() {
- return mCertificateExpiredException;
- }
-
- public void setCertificateExpiredException(CertificateExpiredException c) {
- mCertificateExpiredException = c;
- }
-
- public CertificateNotYetValidException getCertificateNotYetValidException() {
- return mCertificateNotYetValidException;
- }
-
- public void setCertificateNotYetException(CertificateNotYetValidException c) {
- mCertificateNotYetValidException = c;
- }
-
- public CertPathValidatorException getCertPathValidatorException() {
- return mCertPathValidatorException;
- }
-
- public void setCertPathValidatorException(CertPathValidatorException c) {
- mCertPathValidatorException = c;
- }
-
- public CertificateException getOtherCertificateException() {
- return mOtherCertificateException;
- }
-
- public void setOtherCertificateException(CertificateException c) {
- mOtherCertificateException = c;
- }
-
- public SSLPeerUnverifiedException getSslPeerUnverifiedException() {
- return mSslPeerUnverifiedException ;
- }
-
- public void setSslPeerUnverifiedException(SSLPeerUnverifiedException s) {
- mSslPeerUnverifiedException = s;
- }
-
- public boolean isException() {
- return (mCertificateExpiredException != null ||
- mCertificateNotYetValidException != null ||
- mCertPathValidatorException != null ||
- mOtherCertificateException != null ||
- mSslPeerUnverifiedException != null);
- }
-
- public boolean isRecoverable() {
- return (mCertificateExpiredException != null ||
- mCertificateNotYetValidException != null ||
- mCertPathValidatorException != null ||
- mSslPeerUnverifiedException != null);
- }
-
-}
diff --git a/src/com/owncloud/android/network/OwnCloudClientUtils.java b/src/com/owncloud/android/network/OwnCloudClientUtils.java
deleted file mode 100644
index bb299381f2..0000000000
--- a/src/com/owncloud/android/network/OwnCloudClientUtils.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-package com.owncloud.android.network;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-
-import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
-import org.apache.commons.httpclient.protocol.Protocol;
-import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.MainApp;
-import com.owncloud.android.authentication.AccountAuthenticator;
-import com.owncloud.android.authentication.AccountUtils;
-import com.owncloud.android.authentication.AccountUtils.AccountNotFoundException;
-
-
-import eu.alefzero.webdav.WebdavClient;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.AccountManagerFuture;
-import android.accounts.AuthenticatorException;
-import android.accounts.OperationCanceledException;
-import android.app.Activity;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-
-public class OwnCloudClientUtils {
-
- final private static String TAG = OwnCloudClientUtils.class.getSimpleName();
-
- /** Default timeout for waiting data from the server */
- public static final int DEFAULT_DATA_TIMEOUT = 60000;
-
- /** Default timeout for establishing a connection */
- public static final int DEFAULT_CONNECTION_TIMEOUT = 60000;
-
- /** Connection manager for all the WebdavClients */
- private static MultiThreadedHttpConnectionManager mConnManager = null;
-
- private static Protocol mDefaultHttpsProtocol = null;
-
- private static AdvancedSslSocketFactory mAdvancedSslSocketFactory = null;
-
- private static X509HostnameVerifier mHostnameVerifier = null;
-
-
- /**
- * Creates a WebdavClient setup for an ownCloud account
- *
- * Do not call this method from the main thread.
- *
- * @param account The ownCloud account
- * @param appContext Android application context
- * @return A WebdavClient object ready to be used
- * @throws AuthenticatorException If the authenticator failed to get the authorization token for the account.
- * @throws OperationCanceledException If the authenticator operation was cancelled while getting the authorization token for the account.
- * @throws IOException If there was some I/O error while getting the authorization token for the account.
- * @throws AccountNotFoundException If 'account' is unknown for the AccountManager
- */
- public static WebdavClient createOwnCloudClient (Account account, Context appContext) throws OperationCanceledException, AuthenticatorException, IOException, AccountNotFoundException {
- //Log_OC.d(TAG, "Creating WebdavClient associated to " + account.name);
-
- Uri uri = Uri.parse(AccountUtils.constructFullURLForAccount(appContext, account));
- AccountManager am = AccountManager.get(appContext);
- boolean isOauth2 = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null; // TODO avoid calling to getUserData here
- boolean isSamlSso = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null;
- WebdavClient client = createOwnCloudClient(uri, appContext, !isSamlSso);
- if (isOauth2) {
- String accessToken = am.blockingGetAuthToken(account, MainApp.getAuthTokenTypeAccessToken(), false);
- client.setBearerCredentials(accessToken); // TODO not assume that the access token is a bearer token
-
- } else if (isSamlSso) { // TODO avoid a call to getUserData here
- String accessToken = am.blockingGetAuthToken(account, MainApp.getAuthTokenTypeSamlSessionCookie(), false);
- client.setSsoSessionCookie(accessToken);
-
- } else {
- String username = account.name.substring(0, account.name.lastIndexOf('@'));
- //String password = am.getPassword(account);
- String password = am.blockingGetAuthToken(account, MainApp.getAuthTokenTypePass(), false);
- client.setBasicCredentials(username, password);
- }
-
- return client;
- }
-
-
- public static WebdavClient createOwnCloudClient (Account account, Context appContext, Activity currentActivity) throws OperationCanceledException, AuthenticatorException, IOException, AccountNotFoundException {
- Uri uri = Uri.parse(AccountUtils.constructFullURLForAccount(appContext, account));
- AccountManager am = AccountManager.get(appContext);
- boolean isOauth2 = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_OAUTH2) != null; // TODO avoid calling to getUserData here
- boolean isSamlSso = am.getUserData(account, AccountAuthenticator.KEY_SUPPORTS_SAML_WEB_SSO) != null;
- WebdavClient client = createOwnCloudClient(uri, appContext, !isSamlSso);
-
- if (isOauth2) { // TODO avoid a call to getUserData here
- AccountManagerFuture future = am.getAuthToken(account, MainApp.getAuthTokenTypeAccessToken(), null, currentActivity, null, null);
- Bundle result = future.getResult();
- String accessToken = result.getString(AccountManager.KEY_AUTHTOKEN);
- if (accessToken == null) throw new AuthenticatorException("WTF!");
- client.setBearerCredentials(accessToken); // TODO not assume that the access token is a bearer token
-
- } else if (isSamlSso) { // TODO avoid a call to getUserData here
- AccountManagerFuture future = am.getAuthToken(account, MainApp.getAuthTokenTypeSamlSessionCookie(), null, currentActivity, null, null);
- Bundle result = future.getResult();
- String accessToken = result.getString(AccountManager.KEY_AUTHTOKEN);
- if (accessToken == null) throw new AuthenticatorException("WTF!");
- client.setSsoSessionCookie(accessToken);
-
- } else {
- String username = account.name.substring(0, account.name.lastIndexOf('@'));
- //String password = am.getPassword(account);
- //String password = am.blockingGetAuthToken(account, MainApp.getAuthTokenTypePass(), false);
- AccountManagerFuture future = am.getAuthToken(account, MainApp.getAuthTokenTypePass(), null, currentActivity, null, null);
- Bundle result = future.getResult();
- String password = result.getString(AccountManager.KEY_AUTHTOKEN);
- client.setBasicCredentials(username, password);
- }
-
- return client;
- }
-
- /**
- * Creates a WebdavClient to access a URL and sets the desired parameters for ownCloud client connections.
- *
- * @param uri URL to the ownCloud server
- * @param context Android context where the WebdavClient is being created.
- * @return A WebdavClient object ready to be used
- */
- public static WebdavClient createOwnCloudClient(Uri uri, Context context, boolean followRedirects) {
- try {
- registerAdvancedSslContext(true, context);
- } catch (GeneralSecurityException e) {
- Log_OC.e(TAG, "Advanced SSL Context could not be loaded. Default SSL management in the system will be used for HTTPS connections", e);
-
- } catch (IOException e) {
- Log_OC.e(TAG, "The local server truststore could not be read. Default SSL management in the system will be used for HTTPS connections", e);
- }
-
- WebdavClient client = new WebdavClient(getMultiThreadedConnManager());
-
- client.setDefaultTimeouts(DEFAULT_DATA_TIMEOUT, DEFAULT_CONNECTION_TIMEOUT);
- client.setBaseUri(uri);
- client.setFollowRedirects(followRedirects);
-
- return client;
- }
-
-
- /**
- * Registers or unregisters the proper components for advanced SSL handling.
- * @throws IOException
- */
- private static void registerAdvancedSslContext(boolean register, Context context) throws GeneralSecurityException, IOException {
- Protocol pr = null;
- try {
- pr = Protocol.getProtocol("https");
- if (pr != null && mDefaultHttpsProtocol == null) {
- mDefaultHttpsProtocol = pr;
- }
- } catch (IllegalStateException e) {
- // nothing to do here; really
- }
- boolean isRegistered = (pr != null && pr.getSocketFactory() instanceof AdvancedSslSocketFactory);
- if (register && !isRegistered) {
- Protocol.registerProtocol("https", new Protocol("https", getAdvancedSslSocketFactory(context), 443));
-
- } else if (!register && isRegistered) {
- if (mDefaultHttpsProtocol != null) {
- Protocol.registerProtocol("https", mDefaultHttpsProtocol);
- }
- }
- }
-
- public static AdvancedSslSocketFactory getAdvancedSslSocketFactory(Context context) throws GeneralSecurityException, IOException {
- if (mAdvancedSslSocketFactory == null) {
- KeyStore trustStore = getKnownServersStore(context);
- AdvancedX509TrustManager trustMgr = new AdvancedX509TrustManager(trustStore);
- TrustManager[] tms = new TrustManager[] { trustMgr };
-
- SSLContext sslContext = SSLContext.getInstance("TLS");
- sslContext.init(null, tms, null);
-
- mHostnameVerifier = new BrowserCompatHostnameVerifier();
- mAdvancedSslSocketFactory = new AdvancedSslSocketFactory(sslContext, trustMgr, mHostnameVerifier);
- }
- return mAdvancedSslSocketFactory;
- }
-
-
- private static String LOCAL_TRUSTSTORE_FILENAME = "knownServers.bks";
-
- private static String LOCAL_TRUSTSTORE_PASSWORD = "password";
-
- private static KeyStore mKnownServersStore = null;
-
- /**
- * Returns the local store of reliable server certificates, explicitly accepted by the user.
- *
- * Returns a KeyStore instance with empty content if the local store was never created.
- *
- * Loads the store from the storage environment if needed.
- *
- * @param context Android context where the operation is being performed.
- * @return KeyStore instance with explicitly-accepted server certificates.
- * @throws KeyStoreException When the KeyStore instance could not be created.
- * @throws IOException When an existing local trust store could not be loaded.
- * @throws NoSuchAlgorithmException When the existing local trust store was saved with an unsupported algorithm.
- * @throws CertificateException When an exception occurred while loading the certificates from the local trust store.
- */
- private static KeyStore getKnownServersStore(Context context) throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
- if (mKnownServersStore == null) {
- //mKnownServersStore = KeyStore.getInstance("BKS");
- mKnownServersStore = KeyStore.getInstance(KeyStore.getDefaultType());
- File localTrustStoreFile = new File(context.getFilesDir(), LOCAL_TRUSTSTORE_FILENAME);
- Log_OC.d(TAG, "Searching known-servers store at " + localTrustStoreFile.getAbsolutePath());
- if (localTrustStoreFile.exists()) {
- InputStream in = new FileInputStream(localTrustStoreFile);
- try {
- mKnownServersStore.load(in, LOCAL_TRUSTSTORE_PASSWORD.toCharArray());
- } finally {
- in.close();
- }
- } else {
- mKnownServersStore.load(null, LOCAL_TRUSTSTORE_PASSWORD.toCharArray()); // necessary to initialize an empty KeyStore instance
- }
- }
- return mKnownServersStore;
- }
-
-
- public static void addCertToKnownServersStore(Certificate cert, Context context) throws KeyStoreException, NoSuchAlgorithmException,
- CertificateException, IOException {
- KeyStore knownServers = getKnownServersStore(context);
- knownServers.setCertificateEntry(Integer.toString(cert.hashCode()), cert);
- FileOutputStream fos = null;
- try {
- fos = context.openFileOutput(LOCAL_TRUSTSTORE_FILENAME, Context.MODE_PRIVATE);
- knownServers.store(fos, LOCAL_TRUSTSTORE_PASSWORD.toCharArray());
- } finally {
- fos.close();
- }
- }
-
-
- static private MultiThreadedHttpConnectionManager getMultiThreadedConnManager() {
- if (mConnManager == null) {
- mConnManager = new MultiThreadedHttpConnectionManager();
- mConnManager.getParams().setDefaultMaxConnectionsPerHost(5);
- mConnManager.getParams().setMaxTotalConnections(5);
- }
- return mConnManager;
- }
-
-
-}
diff --git a/src/com/owncloud/android/network/ProgressiveDataTransferer.java b/src/com/owncloud/android/network/ProgressiveDataTransferer.java
deleted file mode 100644
index c6fa545bc7..0000000000
--- a/src/com/owncloud/android/network/ProgressiveDataTransferer.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.network;
-
-import java.util.Collection;
-
-import eu.alefzero.webdav.OnDatatransferProgressListener;
-
-public interface ProgressiveDataTransferer {
-
- public void addDatatransferProgressListener (OnDatatransferProgressListener listener);
-
- public void addDatatransferProgressListeners(Collection listeners);
-
- public void removeDatatransferProgressListener(OnDatatransferProgressListener listener);
-
-}
diff --git a/src/com/owncloud/android/notifications/NotificationBuilderWithProgressBar.java b/src/com/owncloud/android/notifications/NotificationBuilderWithProgressBar.java
new file mode 100644
index 0000000000..63ddf6351c
--- /dev/null
+++ b/src/com/owncloud/android/notifications/NotificationBuilderWithProgressBar.java
@@ -0,0 +1,132 @@
+/* ownCloud Android client application
+ * Copyright (C) 2014 ownCloud Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.owncloud.android.notifications;
+
+import com.owncloud.android.R;
+
+import android.app.Notification;
+import android.content.Context;
+import android.os.Build;
+import android.support.v4.app.NotificationCompat;
+import android.view.View;
+import android.widget.RemoteViews;
+
+/**
+ * Extends the support class {@link NotificationCompat.Builder} to grant that
+ * a progress bar is available in every Android version, because
+ * {@link NotificationCompat.Builder#setProgress(int, int, boolean)} has no
+ * real effect for Android < 4.0
+ *
+ * @author David A. Velasco
+ */
+public class NotificationBuilderWithProgressBar extends NotificationCompat.Builder {
+
+ /**
+ * Custom view to replace the original layout of the notifications
+ */
+ private RemoteViews mContentView = null;
+
+ /**
+ * Fatory method.
+ *
+ * Instances of this class will be only returned in Android versions needing it.
+ *
+ * @param context Context that will use the builder to create notifications
+ * @return An instance of this class, or of the regular
+ * {@link NotificationCompat.Builder}, when it is good enough.
+ */
+ public static NotificationCompat.Builder newNotificationBuilderWithProgressBar(Context context) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
+ return new NotificationBuilderWithProgressBar(context);
+ } else {
+ return new NotificationCompat.Builder(context);
+ }
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param context Context that will use the builder to create notifications.
+ */
+ private NotificationBuilderWithProgressBar(Context context) {
+ super(context);
+ mContentView = new RemoteViews(context.getPackageName(), R.layout.notification_with_progress_bar);
+ setContent(mContentView);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public NotificationCompat.Builder setProgress(int max, int progress, boolean indeterminate) {
+ mContentView.setProgressBar(R.id.progress, max, progress, indeterminate);
+ if (max > 0) {
+ mContentView.setViewVisibility(R.id.progressHolder, View.VISIBLE);
+ } else {
+ mContentView.setViewVisibility(R.id.progressHolder, View.GONE);
+ }
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public NotificationCompat.Builder setSmallIcon(int icon) {
+ super.setSmallIcon(icon); // necessary
+ mContentView.setImageViewResource(R.id.icon, icon);
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public NotificationCompat.Builder setContentTitle(CharSequence title) {
+ super.setContentTitle(title);
+ mContentView.setTextViewText(R.id.title, title);
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public NotificationCompat.Builder setContentText(CharSequence text) {
+ super.setContentText(text);
+ mContentView.setTextViewText(R.id.text, text);
+ if (text != null && text.length() > 0) {
+ mContentView.setViewVisibility(R.id.text, View.VISIBLE);
+ } else {
+ mContentView.setViewVisibility(R.id.text, View.GONE);
+ }
+ return this;
+ }
+
+ @Override
+ public Notification build() {
+ Notification result = super.build();
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
+ // super.build() in Android 2.x totally ruins whatever was made #setContent
+ result.contentView = mContentView;
+ }
+ return result;
+ }
+
+
+}
diff --git a/src/com/owncloud/android/notifications/NotificationDelayer.java b/src/com/owncloud/android/notifications/NotificationDelayer.java
new file mode 100644
index 0000000000..aeefe12cf9
--- /dev/null
+++ b/src/com/owncloud/android/notifications/NotificationDelayer.java
@@ -0,0 +1,33 @@
+package com.owncloud.android.notifications;
+
+import java.util.Random;
+
+import android.app.NotificationManager;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Process;
+
+public class NotificationDelayer {
+
+ public static void cancelWithDelay(
+ final NotificationManager notificationManager,
+ final int notificationId,
+ long delayInMillis) {
+
+ HandlerThread thread = new HandlerThread(
+ "NotificationDelayerThread_" + (new Random(System.currentTimeMillis())).nextInt(),
+ Process.THREAD_PRIORITY_BACKGROUND);
+ thread.start();
+
+ Handler handler = new Handler(thread.getLooper());
+ handler.postDelayed(new Runnable() {
+ public void run() {
+ notificationManager.cancel(notificationId);
+ ((HandlerThread)Thread.currentThread()).getLooper().quit();
+ }
+ }, delayInMillis);
+
+ }
+
+
+}
diff --git a/src/com/owncloud/android/operations/ChunkedUploadFileOperation.java b/src/com/owncloud/android/operations/ChunkedUploadFileOperation.java
deleted file mode 100644
index 2649d197e5..0000000000
--- a/src/com/owncloud/android/operations/ChunkedUploadFileOperation.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/* ownCloud Android client application
- * Copyright (C) 2012 Bartek Przybylski
- * Copyright (C) 2012-2013 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- *
- */
-
-package com.owncloud.android.operations;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.channels.FileChannel;
-import java.util.Random;
-
-import org.apache.commons.httpclient.HttpException;
-import org.apache.commons.httpclient.methods.PutMethod;
-
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.network.ProgressiveDataTransferer;
-
-
-import android.accounts.Account;
-
-import eu.alefzero.webdav.ChunkFromFileChannelRequestEntity;
-import eu.alefzero.webdav.WebdavClient;
-import eu.alefzero.webdav.WebdavUtils;
-
-public class ChunkedUploadFileOperation extends UploadFileOperation {
-
- private static final long CHUNK_SIZE = 1024000;
- private static final String OC_CHUNKED_HEADER = "OC-Chunked";
- private static final String TAG = ChunkedUploadFileOperation.class.getSimpleName();
-
- public ChunkedUploadFileOperation( Account account,
- OCFile file,
- boolean isInstant,
- boolean forceOverwrite,
- int localBehaviour) {
-
- super(account, file, isInstant, forceOverwrite, localBehaviour);
- }
-
- @Override
- protected int uploadFile(WebdavClient client) throws HttpException, IOException {
- int status = -1;
-
- FileChannel channel = null;
- RandomAccessFile raf = null;
- try {
- File file = new File(getStoragePath());
- raf = new RandomAccessFile(file, "r");
- channel = raf.getChannel();
- mEntity = new ChunkFromFileChannelRequestEntity(channel, getMimeType(), CHUNK_SIZE, file);
- ((ProgressiveDataTransferer)mEntity).addDatatransferProgressListeners(getDataTransferListeners());
- long offset = 0;
- String uriPrefix = client.getBaseUri() + WebdavUtils.encodePath(getRemotePath()) + "-chunking-" + Math.abs((new Random()).nextInt(9000)+1000) + "-" ;
- long chunkCount = (long) Math.ceil((double)file.length() / CHUNK_SIZE);
- for (int chunkIndex = 0; chunkIndex < chunkCount ; chunkIndex++, offset += CHUNK_SIZE) {
- if (mPutMethod != null) {
- mPutMethod.releaseConnection(); // let the connection available for other methods
- }
- mPutMethod = new PutMethod(uriPrefix + chunkCount + "-" + chunkIndex);
- mPutMethod.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER);
- ((ChunkFromFileChannelRequestEntity)mEntity).setOffset(offset);
- mPutMethod.setRequestEntity(mEntity);
- status = client.executeMethod(mPutMethod);
- client.exhaustResponse(mPutMethod.getResponseBodyAsStream());
- Log_OC.d(TAG, "Upload of " + getStoragePath() + " to " + getRemotePath() + ", chunk index " + chunkIndex + ", count " + chunkCount + ", HTTP result status " + status);
- if (!isSuccess(status))
- break;
- }
-
- } finally {
- if (channel != null)
- channel.close();
- if (raf != null)
- raf.close();
- if (mPutMethod != null)
- mPutMethod.releaseConnection(); // let the connection available for other methods
- }
- return status;
- }
-
-}
diff --git a/src/com/owncloud/android/operations/CreateFolderOperation.java b/src/com/owncloud/android/operations/CreateFolderOperation.java
index f28ad29e82..4df8b3df1f 100644
--- a/src/com/owncloud/android/operations/CreateFolderOperation.java
+++ b/src/com/owncloud/android/operations/CreateFolderOperation.java
@@ -1,5 +1,5 @@
/* ownCloud Android client application
- * Copyright (C) 2012 ownCloud Inc.
+ * Copyright (C) 2014 ownCloud Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
@@ -17,102 +17,103 @@
package com.owncloud.android.operations;
-import java.io.File;
-
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.jackrabbit.webdav.client.methods.MkColMethod;
-
-import com.owncloud.android.Log_OC;
-import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.resources.files.CreateRemoteFolderOperation;
+import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.operations.common.SyncOperation;
+import com.owncloud.android.utils.FileStorageUtils;
-import eu.alefzero.webdav.WebdavClient;
-import eu.alefzero.webdav.WebdavUtils;
-
/**
- * Remote operation performing the creation of a new folder in the ownCloud server.
+ * Access to remote operation performing the creation of a new folder in the ownCloud server.
+ * Save the new folder in Database
*
* @author David A. Velasco
+ * @author masensio
*/
-public class CreateFolderOperation extends RemoteOperation {
+public class CreateFolderOperation extends SyncOperation implements OnRemoteOperationListener{
private static final String TAG = CreateFolderOperation.class.getSimpleName();
-
- private static final int READ_TIMEOUT = 10000;
- private static final int CONNECTION_TIMEOUT = 5000;
protected String mRemotePath;
protected boolean mCreateFullPath;
- protected FileDataStorageManager mStorageManager;
/**
* Constructor
*
- * @param remotePath Full path to the new directory to create in the remote server.
* @param createFullPath 'True' means that all the ancestor folders should be created if don't exist yet.
- * @param storageManager Reference to the local database corresponding to the account where the file is contained.
*/
- public CreateFolderOperation(String remotePath, boolean createFullPath, FileDataStorageManager storageManager) {
+ public CreateFolderOperation(String remotePath, boolean createFullPath) {
mRemotePath = remotePath;
mCreateFullPath = createFullPath;
- mStorageManager = storageManager;
+
}
-
-
- /**
- * Performs the operation
- *
- * @param client Client object to communicate with the remote ownCloud server.
- */
+
+
@Override
- protected RemoteOperationResult run(WebdavClient client) {
- RemoteOperationResult result = null;
- MkColMethod mkcol = null;
- try {
- mkcol = new MkColMethod(client.getBaseUri() + WebdavUtils.encodePath(mRemotePath));
- int status = client.executeMethod(mkcol, READ_TIMEOUT, CONNECTION_TIMEOUT);
- if (!mkcol.succeeded() && mkcol.getStatusCode() == HttpStatus.SC_CONFLICT && mCreateFullPath) {
- result = createParentFolder(getParentPath(), client);
- status = client.executeMethod(mkcol, READ_TIMEOUT, CONNECTION_TIMEOUT); // second (and last) try
- }
- if (mkcol.succeeded()) {
- // Save new directory in local database
- OCFile newDir = new OCFile(mRemotePath);
- newDir.setMimetype("DIR");
- long parentId = mStorageManager.getFileByPath(getParentPath()).getFileId();
- newDir.setParentId(parentId);
- newDir.setModificationTimestamp(System.currentTimeMillis());
- mStorageManager.saveFile(newDir);
- }
- result = new RemoteOperationResult(mkcol.succeeded(), status, mkcol.getResponseHeaders());
- Log_OC.d(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage());
- client.exhaustResponse(mkcol.getResponseBodyAsStream());
-
- } catch (Exception e) {
- result = new RemoteOperationResult(e);
- Log_OC.e(TAG, "Create directory " + mRemotePath + ": " + result.getLogMessage(), e);
-
- } finally {
- if (mkcol != null)
- mkcol.releaseConnection();
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mRemotePath, mCreateFullPath);
+ RemoteOperationResult result = operation.execute(client);
+
+ if (result.isSuccess()) {
+ saveFolderInDB();
+ } else {
+ Log_OC.e(TAG, mRemotePath + "hasn't been created");
}
+
return result;
}
-
- private String getParentPath() {
- String parentPath = new File(mRemotePath).getParent();
- parentPath = parentPath.endsWith(OCFile.PATH_SEPARATOR) ? parentPath : parentPath + OCFile.PATH_SEPARATOR;
- return parentPath;
+ @Override
+ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
+ if (operation instanceof CreateRemoteFolderOperation) {
+ onCreateRemoteFolderOperationFinish((CreateRemoteFolderOperation)operation, result);
+ }
}
-
- private RemoteOperationResult createParentFolder(String parentPath, WebdavClient client) {
- RemoteOperation operation = new CreateFolderOperation( parentPath,
- mCreateFullPath,
- mStorageManager );
- return operation.execute(client);
+
+ private void onCreateRemoteFolderOperationFinish(CreateRemoteFolderOperation operation, RemoteOperationResult result) {
+ if (result.isSuccess()) {
+ saveFolderInDB();
+ } else {
+ Log_OC.e(TAG, mRemotePath + "hasn't been created");
+ }
}
+ /**
+ * Save new directory in local database
+ */
+ public void saveFolderInDB() {
+ if (mCreateFullPath && getStorageManager().
+ getFileByPath(FileStorageUtils.getParentPath(mRemotePath)) == null){// When parent
+ // of remote path
+ // is not created
+ String[] subFolders = mRemotePath.split("/");
+ String composedRemotePath = "/";
+
+ // For each antecesor folders create them recursively
+ for (int i=0; i.
+ *
+ */
+
+package com.owncloud.android.operations;
+
+/**
+ * Creates a new share from a given file
+ *
+ * @author masensio
+ *
+ */
+
+import android.content.Intent;
+
+import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.resources.shares.OCShare;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.shares.GetRemoteSharesForFileOperation;
+import com.owncloud.android.lib.resources.shares.ShareType;
+import com.owncloud.android.lib.resources.shares.CreateRemoteShareOperation;
+import com.owncloud.android.lib.resources.files.FileUtils;
+import com.owncloud.android.operations.common.SyncOperation;
+
+public class CreateShareOperation extends SyncOperation {
+
+ private static final String TAG = CreateShareOperation.class.getSimpleName();
+
+
+ protected FileDataStorageManager mStorageManager;
+
+ private String mPath;
+ private ShareType mShareType;
+ private String mShareWith;
+ private boolean mPublicUpload;
+ private String mPassword;
+ private int mPermissions;
+ private Intent mSendIntent;
+
+ /**
+ * Constructor
+ * @param path Full path of the file/folder being shared. Mandatory argument
+ * @param shareType ‘0’ = user, ‘1’ = group, ‘3’ = Public link. Mandatory argument
+ * @param shareWith User/group ID with who the file should be shared. This is mandatory for shareType of 0 or 1
+ * @param publicUpload If ‘false’ (default) public cannot upload to a public shared folder.
+ * If ‘true’ public can upload to a shared folder. Only available for public link shares
+ * @param password Password to protect a public link share. Only available for public link shares
+ * @param permissions 1 - Read only – Default for “public” shares
+ * 2 - Update
+ * 4 - Create
+ * 8 - Delete
+ * 16- Re-share
+ * 31- All above – Default for “private” shares
+ * For user or group shares.
+ * To obtain combinations, add the desired values together.
+ * For instance, for “Re-Share”, “delete”, “read”, “update”, add 16+8+2+1 = 27.
+ */
+ public CreateShareOperation(String path, ShareType shareType, String shareWith, boolean publicUpload,
+ String password, int permissions, Intent sendIntent) {
+
+ mPath = path;
+ mShareType = shareType;
+ mShareWith = shareWith;
+ mPublicUpload = publicUpload;
+ mPassword = password;
+ mPermissions = permissions;
+ mSendIntent = sendIntent;
+ }
+
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ RemoteOperation operation = null;
+
+ // Check if the share link already exists
+ operation = new GetRemoteSharesForFileOperation(mPath, false, false);
+ RemoteOperationResult result = ((GetRemoteSharesForFileOperation)operation).execute(client);
+
+ if (!result.isSuccess() || result.getData().size() <= 0) {
+ operation = new CreateRemoteShareOperation(mPath, mShareType, mShareWith, mPublicUpload, mPassword, mPermissions);
+ result = ((CreateRemoteShareOperation)operation).execute(client);
+ }
+
+ if (result.isSuccess()) {
+ if (result.getData().size() > 0) {
+ OCShare share = (OCShare) result.getData().get(0);
+ updateData(share);
+ }
+ }
+
+ return result;
+ }
+
+
+ public Intent getSendIntent() {
+ return mSendIntent;
+ }
+
+ private void updateData(OCShare share) {
+ // Update DB with the response
+ share.setPath(mPath);
+ if (mPath.endsWith(FileUtils.PATH_SEPARATOR)) {
+ share.setIsFolder(true);
+ } else {
+ share.setIsFolder(false);
+ }
+ share.setPermissions(mPermissions);
+
+ getStorageManager().saveShare(share);
+
+ // Update OCFile with data from share: ShareByLink and publicLink
+ OCFile file = getStorageManager().getFileByPath(mPath);
+ if (file!=null) {
+ mSendIntent.putExtra(Intent.EXTRA_TEXT, share.getShareLink());
+ file.setPublicLink(share.getShareLink());
+ file.setShareByLink(true);
+ getStorageManager().saveFile(file);
+ Log_OC.d(TAG, "Public Link = " + file.getPublicLink());
+
+ }
+ }
+
+}
diff --git a/src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java b/src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java
new file mode 100644
index 0000000000..c86c8b5e10
--- /dev/null
+++ b/src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java
@@ -0,0 +1,153 @@
+/* ownCloud Android Library is available under MIT license
+ * Copyright (C) 2014 ownCloud Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+
+package com.owncloud.android.operations;
+
+import java.util.ArrayList;
+
+import com.owncloud.android.lib.common.OwnCloudClient;
+import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
+import com.owncloud.android.lib.common.operations.RemoteOperation;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
+
+import android.content.Context;
+import android.net.Uri;
+import android.util.Log;
+
+/**
+ * Operation to find out what authentication method requires
+ * the server to access files.
+ *
+ * Basically, tries to access to the root folder without authorization
+ * and analyzes the response.
+ *
+ * When successful, the instance of {@link RemoteOperationResult} passed
+ * through {@link OnRemoteOperationListener#onRemoteOperationFinish(RemoteOperation,
+ * RemoteOperationResult)} returns in {@link RemoteOperationResult#getData()}
+ * a value of {@link AuthenticationMethod}.
+ *
+ * @author David A. Velasco
+ */
+public class DetectAuthenticationMethodOperation extends RemoteOperation {
+
+ private static final String TAG = DetectAuthenticationMethodOperation.class.getSimpleName();
+
+ public enum AuthenticationMethod {
+ UNKNOWN,
+ NONE,
+ BASIC_HTTP_AUTH,
+ SAML_WEB_SSO,
+ BEARER_TOKEN
+ }
+
+ private Context mContext;
+
+ /**
+ * Constructor
+ *
+ * @param context Android context of the caller.
+ * @param webdavUrl
+ */
+ public DetectAuthenticationMethodOperation(Context context) {
+ mContext = context;
+ }
+
+
+ /**
+ * Performs the operation.
+ *
+ * Triggers a check of existence on the root folder of the server, granting
+ * that the request is not authenticated.
+ *
+ * Analyzes the result of check to find out what authentication method, if
+ * any, is requested by the server.
+ */
+ @Override
+ protected RemoteOperationResult run(OwnCloudClient client) {
+ RemoteOperationResult result = null;
+ AuthenticationMethod authMethod = AuthenticationMethod.UNKNOWN;
+
+ RemoteOperation operation = new ExistenceCheckRemoteOperation("", mContext, false);
+ client.clearCredentials();
+ client.setFollowRedirects(false);
+
+ // try to access the root folder, following redirections but not SAML SSO redirections
+ result = operation.execute(client);
+ String redirectedLocation = result.getRedirectedLocation();
+ while (redirectedLocation != null && redirectedLocation.length() > 0 &&
+ !result.isIdPRedirection()) {
+ client.setBaseUri(Uri.parse(result.getRedirectedLocation()));
+ result = operation.execute(client);
+ redirectedLocation = result.getRedirectedLocation();
+ }
+
+ // analyze response
+ if (result.getCode() == ResultCode.UNAUTHORIZED) {
+ String authRequest = ((result.getAuthenticateHeader()).trim()).toLowerCase();
+ if (authRequest.startsWith("basic")) {
+ authMethod = AuthenticationMethod.BASIC_HTTP_AUTH;
+
+ } else if (authRequest.startsWith("bearer")) {
+ authMethod = AuthenticationMethod.BEARER_TOKEN;
+ }
+ // else - fall back to UNKNOWN
+
+ } else if (result.isSuccess()) {
+ authMethod = AuthenticationMethod.NONE;
+
+ } else if (result.isIdPRedirection()) {
+ authMethod = AuthenticationMethod.SAML_WEB_SSO;
+ }
+ // else - fall back to UNKNOWN
+ Log_OC.d(TAG, "Authentication method found: " + authenticationMethodToString(authMethod));
+
+ if (!authMethod.equals(AuthenticationMethod.UNKNOWN)) {
+ result = new RemoteOperationResult(true, result.getHttpCode(), null);
+ }
+ ArrayList