diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 9f02157fd..592558904 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -6,11 +6,16 @@ labels: ''
assignees: ''
---
+
## Pre-submission checklist
- [ ] I am submitting a bug report, not a feature request.
-- [ ] I am running the latest version of Loop Habit Tracker.
-- [ ] I have have searched for similar issues, but did not find any matches.
+- [ ] I have searched for similar issues, but did not find any matches.
## Description
A clear and concise description of what the problem is.
@@ -21,10 +26,11 @@ A clear and concise description of what the problem is.
3. Scroll down to ....
4. See error
-## Screenshots
-If applicable, add screenshots to help explain your problem.
-
## System information
- Phone: [e.g. Google Pixel 4]
- Phone Operating System: [e.g. Android 10]
- - App version: [e.g. 1.8.9]
+ - App version: [e.g. 2.0.2]
+
+## Screenshots
+If applicable, add screenshots to help explain your problem.
+
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index b00c3bd2a..dfa800a18 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -3,4 +3,4 @@ updates:
- package-ecosystem: "gradle"
directory: "/"
schedule:
- interval: "daily"
+ interval: "monthly"
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 352bb4735..012019cdb 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -30,7 +30,7 @@ jobs:
AndroidTest:
needs: Build
runs-on: macOS-10.15
- timeout-minutes: 45
+ timeout-minutes: 60
strategy:
matrix:
api: [
@@ -56,7 +56,9 @@ jobs:
path: uhabits-android/build/outputs/
- name: Install flock
- run: brew install util-linux
+ run: |
+ brew install util-linux
+ echo "/usr/local/opt/util-linux/bin" >> $GITHUB_PATH
- name: Run Android Tests
run: ./build.sh android-tests ${{ matrix.api }}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d2602177f..0f2e30097 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,28 @@
# Changelog
+## [2.0.3] - 2021-08-21
+### Fixed
+- Improve automatic checkmarks for monthly habits (@iSoron, #947)
+- Fix small theme issues (@iSoron)
+- Fix ANR on some Samsung phones (@iSoron, #962)
+- Fix dates before the year 2000 (@iSoron, #967)
+- Fix notification adding checkmarks to the wrong day (@hiqua, #969)
+- Fix crashes in widgets (@hiqua, @iSoron, #907, #966, #965)
+- Fix crash when moving habits (@hiqua, #968)
+
+## [2.0.2] - 2021-05-23
+
+### Changed
+- Make checkmark widget resizable
+
+### Fixed
+- Fix crash caused by numerical habits with zero target (@iSoron, #903)
+- Fix small issues with font size (@iSoron)
+- Allow fractional target values (@sumanabhi, #911)
+- Fix IllegalStateException in androidx.customview.view (@iSoron, #906)
+- Fix crash when selecting habit frequency in some languages (@iSoron, #926)
+- Fix IllegalArgumentException in RingView (@iSoron, #904)
+
## [2.0.1] - 2021-05-09
### Added
diff --git a/README.md b/README.md
index a01ed787c..b55c6de38 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ source.
-
+
## Screenshots
@@ -109,7 +109,7 @@ contribute, even if you are not a software developer.
more details.
You should have received a copy of the GNU General Public License along
- with this program. If not, see .
+ with this program. If not, see .
[screen1]: screenshots/1.png
[screen2]: screenshots/2.png
@@ -123,9 +123,9 @@ contribute, even if you are not a software developer.
[screen4th]: screenshots/4.thumb.png
[screen5th]: screenshots/5.thumb.png
[screen6th]: screenshots/6.thumb.png
-[poedit]: http://translate.loophabits.org
+[poedit]: https://translate.loophabits.org
[playstore]: https://play.google.com/store/apps/details?id=org.isoron.uhabits
[releases]: https://github.com/iSoron/uhabits/releases
-[fdroid]: http://f-droid.org/app/org.isoron.uhabits
+[fdroid]: https://f-droid.org/app/org.isoron.uhabits
[build]: https://github.com/iSoron/uhabits/blob/dev/docs/BUILD.md
[beta]: https://play.google.com/apps/testing/org.isoron.uhabits
diff --git a/build.gradle.kts b/build.gradle.kts
index 10f9c384b..84cfc1a70 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,11 +1,11 @@
plugins {
- val kotlinVersion = "1.4.21"
- id("com.android.application") version ("4.1.0") apply (false)
+ val kotlinVersion = "1.5.0"
+ id("com.android.application") version ("4.2.0") apply (false)
id("org.jetbrains.kotlin.android") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.android.extensions") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false)
- id("org.jlleitschuh.gradle.ktlint") version "10.0.0"
+ id("org.jlleitschuh.gradle.ktlint") version "10.1.0"
}
apply {
diff --git a/build.sh b/build.sh
index da9194029..b865429de 100755
--- a/build.sh
+++ b/build.sh
@@ -133,6 +133,9 @@ android_test() {
log_error "Some $size instrumented tests failed."
log_error "Saving logcat: $OUT_LOGCAT..."
$ADB logcat -d > $OUT_LOGCAT
+ log_error "Fetching test screenshots..."
+ $ADB pull /sdcard/Android/data/${PACKAGE_NAME}/files/test-screenshots ${ANDROID_OUTPUTS_DIR}/
+ $ADB shell rm -r /sdcard/Android/data/${PACKAGE_NAME}/files/test-screenshots/
return 1
fi
log_info "$size tests passed."
@@ -198,13 +201,6 @@ android_build() {
return 0
}
-android_fetch_images() {
- log_info "Fetching images"
- rm -rf ${ANDROID_OUTPUTS_DIR}/test-screenshots
- $ADB pull /sdcard/Android/data/${PACKAGE_NAME}/files/test-screenshots ${ANDROID_OUTPUTS_DIR}/
- $ADB shell rm -r /sdcard/Android/data/${PACKAGE_NAME}/files/test-screenshots/
-}
-
android_accept_images() {
find ${ANDROID_OUTPUTS_DIR}/test-screenshots -name '*.expected*' -delete
rsync -av ${ANDROID_OUTPUTS_DIR}/test-screenshots/ uhabits-android/src/androidTest/assets/
@@ -233,18 +229,14 @@ CI/CD script for Loop Habit Tracker.
Usage:
build.sh build [options]
- build.sh clean [options]
build.sh android-tests [options]
build.sh android-tests-parallel ... [options]
- build.sh android-fetch-images [options]
build.sh android-accept-images [options]
Commands:
build Build the app and run small tests
- clean Remove all build directories
android-tests Run medium and large Android tests on an emulator
android-tests-parallel Tests multiple API levels simultaneously
- android-fetch-images Fetch failed view test images from device
android-accept-images Copy fetched images to corresponding assets folder
Options:
@@ -274,19 +266,17 @@ main() {
case "$1" in
build)
shift; _parse_opts "$@"
+ clean
core_build
android_build
;;
- clean)
- clean
- ;;
android-tests)
shift; _parse_opts "$@"
if [ -z $1 ]; then
_print_usage
exit 1
fi
- for attempt in {1..3}; do
+ for attempt in {1..5}; do
log_info "Running Android tests (attempt $attempt)..."
android_test $1 && return 0
done
@@ -297,9 +287,6 @@ main() {
shift; _parse_opts "$@"
android_test_parallel $*
;;
- android-fetch-images)
- android_fetch_images
- ;;
android-accept-images)
android_accept_images
;;
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index cc4fdc293..e708b1c02 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 172cea8c2..f371643ee 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Sat Nov 28 09:55:24 CST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip
diff --git a/gradlew b/gradlew
index 2fe81a7d9..4f906e0c8 100755
--- a/gradlew
+++ b/gradlew
@@ -82,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -129,6 +130,7 @@ fi
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
diff --git a/gradlew.bat b/gradlew.bat
index 9618d8d96..107acd32c 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -51,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/translators-crowdin.csv b/translators-crowdin.csv
index 5bba6ccc1..c313f06ef 100644
--- a/translators-crowdin.csv
+++ b/translators-crowdin.csv
@@ -1,350 +1,377 @@
-Name,Languages,"Translated (Words)","Target Words","Approved (Words)",Voted,"""+"" votes received","""-"" votes received","Winning (Words)"
-"Alinson Xavier (iSoron)","Portuguese, Brazilian; Japanese; Spanish; Portuguese; Italian; Chinese Simplified; French; Hungarian; German; Arabic; Hindi; Slovenian; Catalan; Greek; Korean; Bulgarian; Chinese Traditional; Polish; Russian; Serbian (Cyrillic); Turkish; Ukrainian; Czech; Indonesian; Croatian; Danish; Dutch; Romanian; Swedish; Basque; Persian; Vietnamese; Telugu; Finnish; Tamil; Afrikaans; Esperanto; Hebrew",14790,17211,1272,0,1707,70,4259
-"Slobodan Simić (Слободан Симић) (slsimic)","Serbian (Latin); Serbian (Cyrillic)",2053,1830,2105,12,33,0,1982
-"Oglaigh Rystard (oglaignaheireann)","Ukrainian; Portuguese; Catalan; Greek; Basque; Romanian; Italian",1103,1037,1327,1,13,6,954
-"David (Cliff122)",Swedish,1040,1019,725,6,0,0,700
-dukelc,Slovak,919,880,0,0,0,0,0
-KMakoto,"Chinese Traditional",745,1146,949,0,0,0,745
-"Evren (evrenkiymaz)",Turkish,688,604,0,71,4,0,0
-"David Nos (david.nos)","Catalan; Spanish",667,731,0,0,0,0,0
-androide74,Italian,644,659,0,2,0,0,0
-Tomairuka,Japanese,633,1636,909,43,0,0,564
-"Dmitriy Bogdanov (di72nn)",Russian,625,572,1175,0,34,0,519
-reyhoon,Persian,624,759,0,1,1,0,0
-Osoitz,Basque,610,545,0,9,0,0,3
-fabian.bouchal,German,548,527,0,6,0,3,72
-boban77,Czech,509,461,0,2,0,0,0
-"Yoav Argov (YoavArgov)",Hebrew,501,461,0,0,1,8,3
-REMOVED_USER,Norwegian,501,498,501,0,148,0,501
-"Martim Parente (Sharlimar)",Portuguese,497,534,0,38,0,0,0
-"chrrris1987 (Chrrris1987)",Dutch,467,478,0,23,0,0,0
-"Huy Ngo (huyngo)",Vietnamese,461,695,0,1,0,0,0
-"黄克 (hk13127)","Chinese Simplified",461,765,0,1,0,0,0
-"Arkadiusz Bubak (epitek)",Polish,458,416,29,24,0,3,0
-marco.baturan,Esperanto,452,452,0,0,0,0,0
-"Sief Tarek (sieftarek135)",Arabic,447,455,0,0,0,0,0
-"Omer I.S. (omeritzics)",Hebrew,428,366,0,14,1,0,0
-"Samuel Guay (SamGuay)",French,426,486,0,6,0,0,0
-"Diana Karaseva (Sun_Dianka)",Russian,399,373,0,10,1,0,221
-"Alexander Jansson (dalecarlian)",Swedish,396,406,507,0,0,3,399
-luiandresgonzalez,Spanish,383,403,0,1,0,0,0
-"Thamara Andrade (tkcandrade)","Portuguese, Brazilian",380,387,0,0,1,0,252
-"Sølv Ræven (soelvraeven)",Danish,370,370,0,0,0,0,0
-"Isti (eisti)",Hungarian,367,329,0,0,0,0,0
-"Anh Quân (dangquanuet)",Vietnamese,362,530,0,42,1,0,0
-gapszi,Hungarian,348,301,0,86,0,0,0
-"Mahdi Nasiri (mahdi.nasiri)",Persian,343,465,0,39,3,0,0
-Seoyul,Korean,339,825,0,0,27,0,0
-"Magimai Prakasam (magimai)",Tamil,336,831,0,12,0,0,0
-"Michael Malak (MichaelKMalak)",Arabic,304,271,0,0,0,0,0
-"Elina Salminen (salminen.elina.m)",Finnish,297,227,0,0,0,0,0
-ayane.m,Japanese,292,863,0,1,2,0,22
-"Marius Teufelweich (teufelweich)",German,249,256,606,4,0,0,146
-cobalt59,German,237,234,0,1,23,1,132
-"QWERT (lurenjia01)","Chinese Simplified",236,407,0,0,0,0,0
-beriain,Basque,234,235,0,0,2,0,0
-"Intan Ayunda (Intan_Ayunda)",Indonesian,228,239,336,0,0,0,135
-pnhpnh,Vietnamese,225,343,0,1,3,0,0
-"Dika Fitrian Dwi Putra (OsamuDazai)",Indonesian,221,215,0,0,0,0,33
-easyrepro,Telugu,214,297,0,0,0,0,0
-taras-ko,Ukrainian,211,183,0,1,4,0,19
-sojusnik,German,207,200,1,0,30,0,66
-axmed99,Ukrainian,203,177,0,40,0,0,53
-"Heru Yen (heruyen)",Indonesian,201,201,0,0,0,0,2
-Ishmaeel,Turkish,193,174,0,129,6,0,0
-fbruna17,Danish,181,179,0,1,0,0,0
-"Omry Cohen (omrycohen)",Hebrew,175,156,0,1,0,0,0
-Bryanx,Dutch,174,165,0,5,0,0,0
-"Pierre GALIEGUE (pierre.galiegue)",French,171,194,0,24,2,0,0
-DionysosDV,Greek,165,153,0,0,0,0,0
-"Gustavo Lima (GustavoLima)",Portuguese,158,177,0,1,4,10,0
-"Aputsiak Niels Janussen (aputtu)",Danish,153,171,0,0,0,0,0
-plitwin,Polish,145,128,0,1,16,0,26
-"Lương Vĩnh Khang (LuongVinhKhang)",Vietnamese,144,256,0,0,46,1,0
-azzamsa,Indonesian,142,136,0,48,0,1,50
-"Neysa Nasywa (neysanasywa)",Indonesian,140,141,0,0,0,0,35
-JY3,"Chinese Simplified",136,217,80,0,0,0,80
-"Mohammed Imthath (mimthath4)",Tamil,136,274,0,0,11,0,0
-roptat,French,132,154,0,112,88,5,0
-"Trần Thái (tranhoangthai2001)",Vietnamese,127,186,0,8,1,0,0
-"OP Smosher (teenwolffan44)","Serbian (Cyrillic)",124,122,0,0,0,0,18
-4001982248998,Esperanto,122,119,0,0,0,0,0
-"StoP4Me (Lcqp)",Romanian,121,119,0,0,3,0,0
-Sebastian05067,Spanish,114,133,0,55,18,0,0
-"Tanya (MagicUnderHood)",Russian,114,98,0,19,0,0,32
-REMOVED_USER,Arabic,111,106,0,22,21,2,0
-mohmans,Arabic,109,103,0,2,0,0,0
-"Ivan Krušlin (krux3r)",Croatian,108,122,503,0,0,0,108
-"Iabin Arteaga (iabin)",Spanish,108,111,0,4,20,0,0
-2kaafone,Finnish,105,90,0,0,0,0,0
-"Adam Jurkiewicz (hasztagg)",Polish,104,105,529,0,0,0,104
-"Saeed Esmaili (saaeed.es20)",Persian,104,141,0,0,0,0,0
-"just a name bro (justanamebr0)",Danish,98,109,0,0,1,0,0
-"Nam Nguyen (namnl2706)",Vietnamese,95,137,0,0,0,0,0
-"손유정 (yuwon1213)",Korean,95,57,0,0,0,0,0
-ranmagen,Hebrew,91,78,0,0,0,0,0
-LoneWanderer,"Chinese Traditional",90,137,0,4,0,0,0
-"Vo - (voyl)","Chinese Traditional",89,126,0,0,5,0,0
-ikkaz,Indonesian,89,84,0,5,0,0,4
-"Irene K (Heaun)",Korean,88,75,0,25,0,0,0
-"Kumar Anand (kumar0500)",Hindi,87,125,0,0,0,0,0
-Prosta4ok_ua,Ukrainian,87,84,0,1,0,0,17
-"Ohad Edri (ohadalte)",Hebrew,85,79,0,0,1,3,0
-helectron,Persian,84,102,0,1,0,0,0
-"Radu Cebotari (wildProgrammer)",Romanian,84,92,0,1,0,0,0
-"Israa Z (sosozozo)",Arabic,79,87,0,43,11,0,3
-"Sofia Neves (sofiasonev)","Portuguese, Brazilian",79,84,0,1,0,0,46
-Tiralka,French,79,91,0,92,1,0,0
-"Jacob Roller (jdr28070)",Korean,79,61,0,0,0,0,0
-"Toni Mustonen (toni.mustonen)",Finnish,78,72,0,0,0,0,0
-"Michael (quelbs)",German,76,75,0,1,0,0,39
-"Fauz Aladeem (topfauz)",Arabic,76,77,0,0,0,1,0
-RealDonald,Dutch,67,69,0,121,10,0,0
-sirekanyan,"Armenian; Russian",66,65,0,0,0,0,0
-"Константин К. (kocyak1991)",Russian,64,60,0,0,1,2,0
-"Laura Sophie (laurasophie20)",German,62,67,0,4,0,0,0
-raden20,Indonesian,61,62,177,0,1,0,64
-"Jan Wojtecki (j4nw)",Polish,58,46,0,0,0,0,26
-"Deepak Bharathi (deepakbharathi1994)",Tamil,56,107,0,0,11,4,0
-"Андрій Козицький (andriikozytskyi1108)",Ukrainian,52,52,0,0,1,0,0
-REMOVED_USER,Italian,51,52,0,2,0,0,0
-govindap,"Japanese; Hindi",51,114,0,6,1,0,0
-"Mare Geldenhuys (mare.geldenhuys)",Afrikaans,50,57,0,0,0,0,0
-"Peter Williams (williamspete001)",Japanese,49,133,0,1,0,0,3
-"Behnood HRazy (behnoodhr)",Persian,49,70,0,0,0,0,0
-J3ll3nl,Dutch,48,48,0,0,17,1,3
-"tat bz (Tat_i)",German,48,56,0,55,0,0,27
-vach,Armenian,47,36,0,0,0,0,0
-andowero,Czech,47,38,0,0,0,0,0
-"Andrew Firnes (Anechan)",Russian,47,47,0,3,0,0,29
-"Coni Ragni (coni2ragnii)",Spanish,46,46,0,0,0,0,0
-"Rahul Shishodia (rahul.shishodia.10)",Hindi,46,85,0,6,0,0,0
-Cp0204,"Chinese Simplified",45,72,0,0,0,0,0
-"cc (cavaz)",Italian,44,41,0,0,0,0,0
-"Kamil Dziadek (prso94)",Polish,43,39,0,0,2,0,0
-"Boban Jagertraum (boban40)",Czech,43,38,0,2,1,1,0
-andreea.muscalagiu,Romanian,42,52,0,1,0,0,0
-"Me Me (gentelwom)",Arabic,42,40,0,0,0,0,0
-"Balázs Keresztury (belidzs)",Hungarian,42,41,501,0,7,0,38
-MStefanov,Bulgarian,41,55,2,0,2,0,2
-"Ali Zali (stm19951995)",Persian,40,60,0,0,0,0,0
-"Sofia Veijonen (Suklaa) (sofia.veijonen)",Finnish,40,33,0,0,0,0,0
-dusanstrgar,Slovenian,39,41,0,0,0,0,0
-"Limin Lu (liminlu)","Chinese Simplified",39,79,503,0,0,0,39
-Anshoe,Tamil,38,65,0,14,0,0,0
-anasshm,Arabic,37,36,0,9,0,0,0
-hrexen,Armenian,37,37,0,0,0,0,0
-REMOVED_USER,Swedish,36,33,0,5,1,0,0
-"Abdulrahman (D7M)",Arabic,36,39,0,0,0,0,0
-"長谷川知里 (chase0213)",Japanese,34,138,0,13,0,0,24
-"Piotr Łuczyński (peterluczynski)",Polish,33,30,0,6,5,0,2
-"milad farahani (miladfarmahini90)",Persian,33,44,0,18,0,0,3
-"Luis E. Perichon (luisperichon)",Spanish,33,40,0,104,0,0,0
-andriikozytskyi2625,Ukrainian,31,23,0,0,0,0,0
-JoeLi,"Chinese Traditional",31,70,0,12,0,0,24
-Moastafa,Arabic,31,25,0,0,0,0,0
-REMOVED_USER,Russian,31,30,0,2,4,0,3
-"hamza gamal (hamzagamal4444)",Arabic,31,28,0,0,0,0,0
-yancyn,"Chinese Simplified",30,40,0,0,0,0,0
-"비니몬youtube (khj01025276475)",Korean,29,25,0,0,0,0,0
-"Ruud Schouten (ruudschouten)",Dutch,29,32,0,41,3,0,0
-"Guillaume Collic (gcollic)",French,26,28,0,126,11,0,0
-"Niraj Yadav (neverforgetniraj)",Hindi,26,48,0,0,0,0,0
-"Radoslaw Biernacki (radoslaw.biernacki)",Polish,26,24,0,8,0,0,1
-"Jonny I (jonny99dj)",Italian,26,26,0,5,0,0,0
-"Aaron Dalton (Perlkonig)",French,26,25,0,141,1,0,0
-"Eddie (eddieattaboy)","Chinese Traditional",25,34,0,1,0,0,0
-Pan_Filuta,Czech,25,21,0,5,4,0,3
-"eduard83 (barbany.eduard)",Catalan,24,25,0,2,0,0,0
-"Ľuboš Čaky (lubos.caky)",Slovak,23,22,0,0,0,0,0
-"Caner Başaran (basarancaner)",Turkish,23,21,0,0,20,0,0
-hodanli,Turkish,22,26,0,0,1,0,0
-"Neeraj Verma (verma.neeraj.in)",Hindi,22,37,0,0,1,0,0
-"Alcarkse (alexis.brusle)",French,21,25,0,7,11,0,0
-"Shashwat (goforgold)",Hindi,20,33,0,0,0,0,0
-"사자솥 (toke1597)",Korean,19,19,0,0,0,0,0
-"İsa Eş (IsaEs)",Turkish,19,17,0,0,6,1,0
-sheeCesu,French,19,18,0,48,2,0,0
-can13,Turkish,19,14,0,8,0,0,0
-"Magdalena Urbańczyk (madziia139)",Polish,19,19,0,0,0,0,0
-axikman11111,Uyghur,18,19,0,0,0,0,0
-Adeline31,French,17,20,0,3,0,0,0
-"Hoon Jung (hooni100)",Korean,17,10,0,0,0,0,0
-"Ceara Lopez (cealopez)",Spanish,17,18,0,0,5,1,0
-takoyakibento,Korean,17,13,0,3,0,0,0
-bretzel15,German,16,20,0,0,0,0,0
-engineeringforgood,Russian,16,15,0,0,0,0,0
-"Şamil Ateşoğlu (m.samilatesoglu)",Turkish,16,22,0,11,6,3,0
-DebatablySane,Bulgarian,16,15,0,48,0,0,0
-"Bhava Tharini (bhavidanush)",Tamil,15,37,0,0,0,0,0
-"Anastasia Borchuk (al2.borchuk)",Russian,14,14,0,0,0,0,0
-"EuiHo Hwang (euiho.hwang)",Korean,14,16,0,0,0,0,0
-iamsurajbobade,Hindi,14,30,0,0,0,0,0
-"Zeynep Esen (nezihaesen50)",Turkish,14,13,0,0,0,0,0
-"Fikret Bilici (fikretbilici)",Turkish,14,13,0,0,0,0,0
-"Zeeshan Rabbani (Zeera)",Hindi,14,25,0,0,0,0,0
-"Sanji Vinsmock (mukanzhanbolat4)",Russian,14,14,0,0,0,0,0
-"Nenad Vukotic (vukotic.nenad)","Serbian (Cyrillic)",13,13,0,1,2,6,0
-"Uwe Mönks (schirinowski)",German,13,12,0,0,0,0,0
-"Dave (xdave)",Hungarian,13,11,0,0,0,0,0
-soura2,Arabic,12,13,0,0,0,0,0
-"shreyas (techiespace)",Hindi,12,20,0,0,0,0,0
-"Jo Chuang (josephch405)","Chinese Traditional",11,24,0,0,0,0,11
-Vmrc,French,11,12,0,2,0,0,0
-"sathvic k (sathvictripleseven)",Telugu,10,17,0,0,0,0,0
-"Edwin van Rooij (edwinvrooij)",Dutch,10,13,0,17,0,0,0
-"Brian Camacho (bmcamacho)",Polish,10,11,0,0,1,0,0
-"Ahmed Mosaad (ahmed.mosaad2018)",Arabic,10,12,0,6,0,0,0
-"Mihael Wagner (miha.wagner)",Slovenian,10,9,0,7,0,0,0
-"Anonymous edgy nerd (yamentaad)",Arabic,10,13,0,1,0,0,0
-"Martin Vostatek (martinvostatek)",Czech,9,8,0,32,2,0,0
-"Sourire Lucide (sourire_lucide)",Russian,9,10,0,0,1,0,0
-"Suhaili Hassan (kucingsyg96)",Indonesian,9,10,0,0,0,0,0
-"Seweryn Piotrowski (Draxxsx)",Polish,9,10,0,0,19,0,0
-Rex123,Persian,8,8,0,0,0,0,0
-"Konstantin (KZhidovinov)",Russian,7,7,0,0,0,0,0
-pkorove,Greek,7,7,0,0,0,0,0
-ftfoi,Norwegian,7,6,0,0,0,0,0
-"Андрій Козицький (andriikozytskyi3807)",Ukrainian,7,12,0,2,0,0,0
-"Vladimir Pavlychev (KeyJoo)",Russian,7,9,0,0,0,0,0
-"Andrey ZaXeLoN (waragaa)",Russian,7,7,0,8,1,0,0
-erfan2927,Persian,6,6,0,0,0,0,0
-dragnus,Arabic,6,6,0,1,1,0,0
-"Sam (SorodonSorodon)",German,6,6,0,13,0,0,0
-ChloeLiang,Japanese,6,22,0,0,1,0,3
-"Burak Ceylan (7burakceylan)",Turkish,6,6,0,0,0,0,0
-"닉닉 (seohu9466)",Korean,6,14,0,13,0,0,0
-"Matthias Joly (joly.matt12)",French,5,8,0,27,1,0,0
-"Guerra Ivaneth (rossanaiva-04)",Spanish,5,7,0,0,0,0,0
-"Manuel Tassi (Mannivu)",Italian,5,6,0,0,0,0,0
-"Micaela Pighin (micaelapiighin)",Spanish,5,6,0,1,0,0,0
-"Дмитрий Хапенков (d.khapenkov)",Russian,5,5,0,6,4,0,2
-andriikozytskyi2018,Ukrainian,5,5,0,0,0,0,0
-"Neko123 (emandic11)","Serbian (Cyrillic)",4,4,0,57,0,0,0
-marmo,German,4,4,0,0,0,0,0
-"Eli Besirov (elibesirov07)",Turkish,4,4,0,0,0,0,0
-"Lopo Isaac Fernández (rocapata)",Spanish,4,3,0,0,0,0,0
-bziuum,Polish,4,4,0,0,0,0,0
-"Thoum Ptrgnt (thomas.petrignet)",French,3,3,0,2,0,3,0
-"Vagner Roberto (vagner.trompete)","Portuguese, Brazilian",3,3,0,0,0,0,0
-"Unnie Here (Carb)",Hindi,3,8,0,0,0,0,0
-carsten_kafke,German,3,3,0,43,0,0,3
-Magidxz,Arabic,3,3,0,0,0,0,0
-atomjani,Hungarian,3,3,0,0,0,0,0
-"Péter Bernát (bernatp)",Hungarian,3,2,0,0,0,0,0
-"Igor Piskun (i_piskun)",Ukrainian,3,3,0,0,0,0,0
-"joabe gabriel (joabegabrielcma1)","Portuguese, Brazilian",3,4,0,0,0,0,0
-"Oleg Kogut (kogut_oleg)",Ukrainian,3,3,0,0,0,0,0
-"Andrea Bianchi (andreawhite1597)",Italian,3,1,0,1,0,0,0
-"Gabriel Cavalcante (gabrielc.alves14)","Portuguese, Brazilian",3,4,0,0,0,0,0
-REMOVED_USER,"Portuguese, Brazilian",3,4,0,0,0,0,0
-"Martin Zimdahl (zimdahlmartin)",Swedish,3,2,0,0,1,0,3
-"Hiohana Rilary (hiohanarilary)","Portuguese, Brazilian",3,4,0,0,0,0,0
-"Sarath S (CyberShark)",Tamil,3,7,0,0,0,0,0
-"Cláudio Bernardo (claudiobernardo.ti)","Portuguese, Brazilian",3,4,0,1,0,0,0
-"hesamiranii (esam.matouri)",Persian,2,2,0,0,0,0,0
-"조화정 (yunjoo337)",Korean,2,2,0,0,0,0,0
-"Walid Baazia (walidbaazia2005)",Arabic,2,1,0,0,0,0,0
-LNDDYL,"Chinese Traditional",2,4,0,0,0,0,2
-REMOVED_USER,Ukrainian,2,2,0,0,0,0,0
-"fatemeh s (fargolseifoori3)",Persian,2,2,0,0,0,0,0
-"أم محمد تقي (souadboudia19)",Arabic,2,2,0,0,0,0,0
-"Alex Stein (diefaust1993)",Russian,2,2,0,4,4,0,2
-"Danial Agh (danialagh)",Persian,2,3,0,0,0,0,0
-omerfarukbas,Turkish,2,3,0,19,2,0,0
-"Valerij D (vala.dobler)",German,2,2,0,0,0,0,0
-"Naveen jai krishna (njsbpolymer1)",Tamil,2,5,0,0,0,0,0
-"Balthazar Aubard (Balatzar)",French,2,5,0,0,1,0,0
-"FAy FAy (fayfayfay52)","Chinese Traditional",2,5,0,0,0,0,0
-Soroor_SI,Persian,2,2,0,0,0,0,0
-chavs1997,Russian,2,2,0,9,0,0,0
-amei,"Portuguese, Brazilian",2,2,0,0,0,0,0
-"Ilyas Fekhar (il47yas)",Arabic,2,2,0,0,0,0,0
-"Ali Zaida (alizaeda92)",Arabic,2,2,0,0,0,0,0
-gnu-ewm,Polish,1,1,0,6,0,0,0
-"Luca Gori (grolcu)",Italian,1,2,0,0,0,0,0
-"Alan Jeon (skyisle)",Korean,1,2,0,8,0,0,0
-iSoron2,"Portuguese, Brazilian",1,1,0,0,0,0,0
-"Anastasiia Bondarenko (nastasya.bondarenko.97)",Russian,1,1,0,0,0,0,0
-"Patrick Pimenta (trickap1)","Portuguese, Brazilian",1,1,0,0,0,0,0
-axd,Spanish,1,1,0,15,0,0,0
-jonesses,German,1,1,0,1,0,0,1
-"박찌 (perpact20)",Korean,1,1,0,0,0,0,0
-"Kan Black (kanblack.va)",Vietnamese,1,2,0,0,0,1,0
-REMOVED_USER,Russian,1,2,0,6,1,0,1
-"Wibi Cahyo (wbcahyoh)",Indonesian,1,3,0,0,0,0,0
-"Anton (tT0NG)","Chinese Traditional",1,2,0,0,0,0,1
-"Maria Fefelova (mashafefel)",Russian,1,1,0,0,0,0,0
-Itch,,0,0,0,0,0,0,0
-"Muhammet Furkan ALMACI (furkan.almaci)",Turkish,0,0,0,1,0,0,0
-Sandhu564.,,0,0,0,0,0,0,0
-"Quentin Hibon (hiq)",,0,0,0,0,0,0,0
-mushin,,0,0,0,0,0,0,0
-"Balaji Jayaraman (jkbalaji1103)",,0,0,0,0,0,0,0
-"Wellington Ribeiro (wellington.rib)",,0,0,0,0,0,0,0
-"Javid IRAN (twitteriran98)",Persian,0,0,0,1,0,0,0
-"박인호 (wphestiraid)",Korean,0,0,0,2,0,0,0
-"Ahmed Nazir (ahmednazir333)",,0,0,0,0,0,0,0
-dimateos,,0,0,0,0,0,0,0
-AhmedDz,Arabic,0,0,0,1,0,0,0
-"reza golestanzadeh (reza.golestanzadeh)",Persian,0,0,0,1,0,0,0
-"Petros Bleyan (coolbleyan)",Russian,0,0,0,14,0,0,0
-Kamalakannan,,0,0,0,0,0,0,0
-"Dagna Q (dagnaq)",,0,0,0,0,0,0,0
-"Thomas Orlita (Thomas995)",Czech,0,0,0,1,0,0,0
-Fazy1380,,0,0,0,0,0,0,0
-"Rivo Zängov (Eraser)",,0,0,0,0,0,0,0
-T-v-Gerwen,Dutch,0,0,0,47,0,0,0
-"عبد الناصر سعيد الثبيتي (asaeed)",,0,0,0,0,0,0,0
-"Edmunds Edmundam (edmundam)",,0,0,0,0,0,0,0
-"vi ve (VimalV)",,0,0,0,0,0,0,0
-"LeMeD (LeMeS)",French,0,0,0,2,0,0,0
-"Éjbãss Übbeî (littlebittlebottle)",Norwegian,0,0,0,152,0,0,0
-EmanAmini,,0,0,0,0,0,0,0
-AnggaRifandi,,0,0,0,0,0,0,0
-"Mateusz Teteruk (mttet)",Polish,0,0,0,1,0,0,0
-"Lori Amico (lavodkaclyde2323)",Italian,0,0,0,1,0,0,0
-"Florian Stuhlmann (stuhlmann)",German,0,0,0,10,0,0,0
-"Yasin Okumus (lacivert)",Turkish,0,0,0,1,0,0,0
-NairaDNV,Spanish,0,0,0,9,0,0,0
-REMOVED_USER,,0,0,0,0,0,0,0
-farbod66,Persian,0,0,0,1,0,0,0
-Raulbertassi,,0,0,0,0,0,0,0
-"Равиль Мифтахов (ravilmif47)",Russian,0,0,0,1,0,0,0
-"Pumpith Ungsupanit (pumpithu)",,0,0,0,0,0,0,0
-"Nat Fomicheva (natac)",Russian,0,0,0,3,0,0,0
-EwanB,,0,0,0,0,0,0,0
-ava_rfie,Persian,0,0,0,1,0,0,0
-"George Merkulov (george142.emarket)",Russian,0,0,0,11,0,0,0
-REMOVED_USER,,0,0,0,0,0,0,0
-sanyoniket,,0,0,0,0,0,0,0
-"Shuvashish Sahoo (shuvashish76)",,0,0,0,0,0,0,0
-martyaberger,,0,0,0,0,0,0,0
-"Карлен Шаухаев (KarlenShaukhaev)",,0,0,0,0,0,0,0
-"Elmo (oberknecht)",,0,0,0,0,0,0,0
-Irsgram,Russian,0,0,0,1,0,0,0
-"Matus Zdansky (matuszdansky)",,0,0,0,0,0,0,0
-shuvo786,,0,0,0,0,0,0,0
-"Eduard Boboc (edi.boboc33)",Romanian,0,0,0,4,0,0,0
-Hayder21,,0,0,0,0,0,0,0
-AsadullahIlyas,,0,0,0,0,0,0,0
-"Никита Карамов (nikita.karamoff)",Russian,0,0,0,10,0,0,0
-"Katherine Alexandra Flórez Ramírez (katherine.florez12)",Spanish,0,0,0,46,0,0,0
-mdrobulis,,0,0,0,0,0,0,0
-"Eliška Roubalová (roubaeli)",Czech,0,0,0,6,0,0,0
-droidahmed,Arabic,0,0,0,7,0,0,0
-"Arjun K. (arjunkdot)",,0,0,0,0,0,0,0
-"Sarah BCNN (fsarahboucenna)",French,0,0,0,16,0,0,0
-REMOVED_USER,Czech,0,0,0,18,0,0,0
-BongTran,Vietnamese,0,0,0,2,0,0,0
-"Arttu Ylhävuori (arttu.ylhavuori)",,0,0,0,0,0,0,0
-valney.faria,"Portuguese, Brazilian",0,0,0,1,0,0,0
-REMOVED_USER,,0,0,0,0,0,0,0
-rooban23,,0,0,0,0,0,0,0
-REMOVED_USER,,0,0,0,0,0,0,0
-"Алтынбек Наурызғали (altinbeknaurizgali)",Russian,0,0,0,1,0,0,0
-"Sri Harsha Bhogi (sriharshabhogi)",,0,0,0,0,0,0,0
-"Ahnaf Tajwar (atn4404)",,0,0,0,0,0,0,0
-Elham1361,,0,0,0,0,0,0,0
-dongchen.yue,German,0,0,0,4,0,0,0
-philfr49,French,0,0,0,2,0,0,0
+Name,Languages,"Translated (Words)","Target Words","Approved (Words)",Voted,"""+"" votes received","""-"" votes received","Winning (Words)",Joined
+"Alinson Xavier (iSoron)","Portuguese, Brazilian; Japanese; Spanish; Portuguese; Italian; Chinese Simplified; French; Hungarian; German; Arabic; Hindi; Slovenian; Catalan; Greek; Korean; Bulgarian; Chinese Traditional; Polish; Russian; Serbian (Cyrillic); Turkish; Ukrainian; Czech; Indonesian; Croatian; Danish; Dutch; Romanian; Swedish; Basque; Persian; Finnish; Vietnamese; Telugu; Tamil; Afrikaans; Esperanto; Hebrew",14808,17227,1282,0,1779,80,4274,"2016-03-05 18:35:27"
+"Slobodan Simić (Слободан Симић) (slsimic)","Serbian (Latin); Serbian (Cyrillic)",2054,1831,2114,12,33,0,1991,"2021-02-03 14:26:07"
+"Oglaigh Rystard (oglaignaheireann)","Ukrainian; Portuguese; Catalan; Greek; Basque; Romanian; Italian",1103,1037,1327,1,13,6,954,"2017-03-31 09:13:19"
+"David (Cliff122)",Swedish,1040,1019,725,6,0,0,700,"2020-01-21 13:56:55"
+"Omer I.S. (omeritzics)",Hebrew,1000,900,1097,14,1,0,946,"2020-10-11 20:10:51"
+dukelc,Slovak,919,880,0,0,0,0,0,"2020-08-27 14:02:41"
+"Intan Ayunda (Intan_Ayunda)",Indonesian,800,793,962,0,0,0,711,"2020-10-14 07:51:58"
+KMakoto,"Chinese Traditional",745,1146,949,0,0,0,745,"2019-10-22 04:19:52"
+"Evren (evrenkiymaz)",Turkish,688,604,0,71,5,1,0,"2020-10-04 03:39:16"
+"David Nos (david.nos)","Catalan; Spanish",667,731,0,0,1,0,0,"2020-01-04 10:15:36"
+"Antti Kallio (antti.kallio)",Finnish,650,525,0,0,0,0,0,"2021-07-03 05:54:44"
+androide74,Italian,644,659,0,2,0,0,0,"2020-02-06 15:46:28"
+Tomairuka,Japanese,633,1636,909,43,0,0,564,"2020-12-12 12:14:22"
+"Dmitriy Bogdanov (di72nn)",Russian,625,572,1197,0,36,0,515,"2017-03-31 10:00:48"
+reyhoon,Persian,624,759,0,1,3,1,0,"2020-10-01 18:17:23"
+Osoitz,Basque,610,545,0,9,0,0,3,"2018-01-23 14:07:47"
+"Saeed Esmaili (saaeed.es20)",Persian,568,774,0,5,4,0,0,"2020-11-26 15:41:15"
+fabian.bouchal,German,548,527,0,6,0,3,72,"2020-01-07 06:43:37"
+boban77,Czech,509,461,0,2,0,0,0,"2020-04-30 13:18:24"
+"Yoav Argov (YoavArgov)",Hebrew,501,461,0,0,1,8,103,"2017-04-28 07:23:01"
+REMOVED_USER,Norwegian,501,498,501,0,148,0,501,"2017-07-05 19:02:25"
+"Martim Parente (Sharlimar)",Portuguese,497,534,0,38,0,0,0,"2020-08-26 10:22:11"
+"chrrris1987 (Chrrris1987)",Dutch,467,478,0,23,0,0,0,"2020-02-03 05:26:04"
+"Huy Ngo (huyngo)",Vietnamese,461,695,0,1,0,0,0,"2020-01-26 11:58:36"
+"黄克 (hk13127)","Chinese Simplified",461,765,0,1,0,0,24,"2020-01-17 23:16:03"
+"Arkadiusz Bubak (epitek)",Polish,458,416,29,24,0,3,0,"2020-11-05 05:11:58"
+marco.baturan,Esperanto,452,452,0,0,0,0,0,"2020-06-23 02:49:46"
+"Sief Tarek (sieftarek135)",Arabic,447,455,0,0,0,0,0,"2021-02-07 14:35:21"
+"Samuel Guay (SamGuay)",French,426,486,0,6,0,0,0,"2020-06-25 07:14:38"
+"Diana Karaseva (Sun_Dianka)",Russian,399,373,0,10,1,0,209,"2020-01-30 06:40:02"
+"Alexander Jansson (dalecarlian)",Swedish,396,406,507,0,0,3,399,"2017-06-21 01:37:32"
+luiandresgonzalez,Spanish,383,403,0,1,28,0,0,"2020-07-11 14:20:44"
+"Thamara Andrade (tkcandrade)","Portuguese, Brazilian",380,387,0,0,1,0,252,"2020-01-09 19:35:48"
+"Sølv Ræven (soelvraeven)",Danish,370,370,0,0,0,0,0,"2020-11-28 16:46:18"
+"Isti (eisti)",Hungarian,367,329,0,0,0,0,0,"2020-12-03 12:02:51"
+"Anh Quân (dangquanuet)",Vietnamese,362,530,0,42,2,0,0,"2017-10-29 12:27:44"
+gapszi,Hungarian,348,301,0,86,0,0,0,"2019-04-08 01:35:54"
+JY3,"Chinese Simplified",345,585,278,0,1,0,207,"2021-03-08 08:53:35"
+"Mahdi Nasiri (mahdi.nasiri)",Persian,343,465,0,39,3,1,0,"2017-07-14 09:17:25"
+Seoyul,Korean,339,825,0,0,27,0,0,"2017-06-21 08:11:39"
+"Magimai Prakasam (magimai)",Tamil,336,831,0,12,0,0,0,"2018-04-15 21:16:08"
+"Michael Malak (MichaelKMalak)",Arabic,304,271,0,0,0,0,0,"2020-05-26 19:47:58"
+"Elina Salminen (salminen.elina.m)",Finnish,297,227,0,0,0,0,0,"2021-01-06 01:28:57"
+ayane.m,Japanese,292,863,0,1,3,0,22,"2019-11-20 03:28:26"
+Blinkin,Dutch,284,318,0,1,0,0,0,"2021-06-14 10:30:05"
+"Marius Teufelweich (teufelweich)",German,249,256,606,4,2,0,146,"2021-03-12 04:11:38"
+cobalt59,German,237,234,0,1,24,1,132,"2017-06-05 05:18:33"
+"QWERT (lurenjia01)","Chinese Simplified",236,407,0,0,8,0,19,"2020-03-08 01:46:25"
+beriain,Basque,234,235,0,0,2,0,0,"2017-03-31 15:42:28"
+pnhpnh,Vietnamese,225,343,0,1,3,0,0,"2017-11-27 12:06:07"
+"Dika Fitrian Dwi Putra (OsamuDazai)",Indonesian,221,215,0,0,0,0,48,"2020-07-13 04:40:27"
+easyrepro,Telugu,214,297,0,0,0,0,0,"2020-06-12 12:52:10"
+taras-ko,Ukrainian,211,183,0,1,4,0,19,"2017-10-26 16:52:22"
+sojusnik,German,207,200,1,0,30,0,66,"2017-04-03 17:11:56"
+axmed99,Ukrainian,203,177,0,40,0,0,53,"2021-04-01 03:56:20"
+"Heru Yen (heruyen)",Indonesian,201,201,0,0,0,0,25,"2020-06-29 18:39:15"
+"Vijaykumar Borkar (vjkumar)",Hindi,200,364,0,11,0,0,0,"2021-08-06 16:12:15"
+Ishmaeel,Turkish,193,174,0,129,6,0,0,"2017-10-04 03:54:00"
+"Aputsiak Niels Janussen (aputtu)",Danish,187,200,0,0,0,0,0,"2019-08-28 05:47:42"
+_translator,French,181,206,0,11,0,0,0,"2021-07-06 07:54:12"
+fbruna17,Danish,181,179,0,1,0,0,0,"2021-01-28 15:48:47"
+"Omry Cohen (omrycohen)",Hebrew,175,156,0,1,0,0,33,"2021-01-18 07:33:23"
+Bryanx,Dutch,174,165,0,5,0,0,0,"2019-11-21 17:08:12"
+"Pierre GALIEGUE (pierre.galiegue)",French,171,194,0,24,4,0,0,"2020-08-16 11:41:35"
+bruhwut,Vietnamese,171,268,0,1,0,0,0,"2021-05-21 07:16:30"
+DionysosDV,Greek,165,153,0,0,0,0,0,"2021-02-27 19:05:25"
+"Gustavo Lima (GustavoLima)",Portuguese,158,177,0,1,4,10,0,"2020-08-26 10:35:05"
+oscfd,Spanish,155,166,0,1,4,0,0,"2021-05-21 17:58:22"
+plitwin,Polish,145,128,0,1,16,0,26,"2021-01-20 06:18:37"
+"Lương Vĩnh Khang (LuongVinhKhang)",Vietnamese,144,256,0,0,46,1,0,"2017-08-10 10:05:58"
+azzamsa,Indonesian,142,136,0,48,0,1,26,"2017-06-16 18:29:45"
+"yoding (yodingc)","Chinese Traditional; Chinese Simplified",141,271,0,10,0,0,0,"2021-07-07 01:45:45"
+"Neysa Nasywa (neysanasywa)",Indonesian,140,141,0,0,0,0,60,"2020-11-18 10:32:10"
+"Mohammed Imthath (mimthath4)",Tamil,136,274,0,0,11,0,0,"2018-02-15 22:41:15"
+roptat,French,132,154,0,112,89,5,0,"2017-04-19 16:54:47"
+"Trần Thái (tranhoangthai2001)",Vietnamese,127,186,0,8,1,0,0,"2018-03-01 10:51:39"
+"OP Smosher (teenwolffan44)","Serbian (Cyrillic)",124,122,0,0,0,0,18,"2020-11-05 09:41:35"
+4001982248998,Esperanto,122,119,0,0,0,0,0,"2017-10-08 04:13:02"
+"StoP4Me (Lcqp)",Romanian,121,119,0,0,3,0,0,"2018-05-06 18:51:59"
+alalloush,Arabic,118,129,0,2,2,0,0,"2017-03-31 12:37:17"
+"Eilif Adelvice (adelvice)",Spanish,116,126,0,96,0,0,0,"2021-08-05 07:20:21"
+Sebastian05067,Spanish,114,133,0,55,28,0,0,"2017-05-14 00:48:16"
+"Tanya (MagicUnderHood)",Russian,114,98,0,19,0,0,54,"2019-04-21 10:44:03"
+REMOVED_USER,Arabic,111,106,0,22,21,2,0,"2018-01-05 07:01:45"
+mohmans,Arabic,109,103,0,2,0,0,0,"2020-11-23 02:48:00"
+"Iabin Arteaga (iabin)",Spanish,108,111,0,4,21,0,0,"2017-08-26 21:08:54"
+"Ivan Krušlin (krux3r)",Croatian,108,122,503,0,0,0,108,"2017-03-31 09:15:24"
+2kaafone,Finnish,105,90,0,0,0,0,0,"2019-08-12 06:58:48"
+"Adam Jurkiewicz (hasztagg)",Polish,104,105,529,0,0,0,104,"2017-03-31 09:50:51"
+"just a name bro (justanamebr0)",Danish,98,109,0,0,1,0,0,"2019-06-19 11:57:55"
+"Nam Nguyen (namnl2706)",Vietnamese,95,137,0,0,0,0,0,"2020-08-18 23:02:33"
+"손유정 (yuwon1213)",Korean,95,57,0,0,0,0,0,"2021-03-30 05:25:33"
+ranmagen,Hebrew,91,78,0,0,0,0,0,"2021-02-16 05:44:31"
+LoneWanderer,"Chinese Traditional",90,137,0,4,0,0,0,"2020-09-29 05:24:48"
+"Vo - (voyl)","Chinese Traditional",89,126,0,0,5,0,0,"2020-09-02 23:34:42"
+ikkaz,Indonesian,89,84,0,5,0,0,4,"2019-09-02 19:58:54"
+"Irene K (Heaun)",Korean,88,75,0,25,0,0,0,"2020-03-16 11:31:12"
+Prosta4ok_ua,Ukrainian,87,84,0,1,0,0,17,"2020-01-23 19:43:41"
+"Kumar Anand (kumar0500)",Hindi,87,125,0,0,0,0,0,"2020-11-07 02:46:09"
+"Ohad Edri (ohadalte)",Hebrew,85,79,0,0,1,3,18,"2020-07-04 03:42:09"
+helectron,Persian,84,102,0,1,0,0,0,"2021-03-02 04:10:51"
+"Radu Cebotari (wildProgrammer)",Romanian,84,92,0,1,0,0,0,"2020-02-05 01:20:00"
+"Sofia Neves (sofiasonev)","Portuguese, Brazilian",79,84,0,1,0,0,46,"2020-03-12 18:19:46"
+"Jacob Roller (jdr28070)",Korean,79,61,0,0,0,0,0,"2020-01-03 11:36:40"
+Tiralka,French,79,91,0,92,1,0,0,"2018-02-09 18:39:01"
+"Israa Z (sosozozo)",Arabic,79,87,0,43,12,0,3,"2017-11-27 14:10:50"
+"Toni Mustonen (toni.mustonen)",Finnish,78,72,0,0,0,0,0,"2017-09-02 05:34:12"
+"Fauz Aladeem (topfauz)",Arabic,76,77,0,0,0,1,0,"2020-02-21 22:46:12"
+"Michael (quelbs)",German,76,75,0,1,0,0,39,"2020-08-18 07:39:26"
+"Oliver Gronowski (OliverGronowski)",German,70,69,0,5,0,0,0,"2021-05-14 16:37:10"
+RealDonald,Dutch,67,69,0,121,10,0,0,"2017-06-23 20:10:12"
+sirekanyan,"Armenian; Russian",66,65,0,0,0,0,0,"2020-04-18 11:32:52"
+"Константин К. (kocyak1991)",Russian,64,60,0,0,1,2,0,"2018-06-10 13:39:37"
+"Laura Sophie (laurasophie20)",German,62,67,0,4,0,0,0,"2018-01-06 14:21:24"
+"Alparslan Sakci (sakci)",Turkish,61,55,0,11,0,0,0,"2021-06-10 11:59:22"
+raden20,Indonesian,61,62,177,0,1,0,64,"2017-04-09 22:04:23"
+"Jan Wojtecki (j4nw)",Polish,58,46,0,0,0,0,26,"2017-11-02 05:42:14"
+"Deepak Bharathi (deepakbharathi1994)",Tamil,56,107,0,0,11,4,0,"2017-09-17 08:00:31"
+"Peter Williams (williamspete001)",Japanese,55,147,0,2,0,0,3,"2020-01-01 13:17:44"
+"Андрій Козицький (andriikozytskyi1108)",Ukrainian,52,52,0,0,1,0,0,"2018-10-22 01:45:08"
+"Nil riera (nilriera2000)",Catalan,52,61,0,1,0,0,0,"2021-06-22 16:37:44"
+REMOVED_USER,Italian,51,52,0,2,0,0,0,"2017-08-21 05:15:31"
+govindap,"Japanese; Hindi",51,114,0,6,1,0,0,"2020-06-02 20:15:52"
+"Mare Geldenhuys (mare.geldenhuys)",Afrikaans,50,57,0,0,0,0,0,"2017-10-20 18:00:14"
+"Behnood HRazy (behnoodhr)",Persian,49,70,0,0,0,0,0,"2017-11-25 10:57:21"
+"tat bz (Tat_i)",German,48,56,0,55,0,0,27,"2021-03-26 05:12:54"
+J3ll3nl,Dutch,48,48,0,0,17,1,3,"2017-03-31 11:56:09"
+"Andrew Firnes (Anechan)",Russian,47,47,0,3,0,0,29,"2019-09-18 09:51:59"
+andowero,Czech,47,38,0,0,0,0,0,"2020-01-20 02:29:01"
+vach,Armenian,47,36,0,0,0,0,0,"2020-04-18 16:53:12"
+"Rahul Shishodia (rahul.shishodia.10)",Hindi,46,85,0,6,5,1,0,"2018-12-24 22:18:19"
+"Coni Ragni (coni2ragnii)",Spanish,46,46,0,0,0,0,0,"2021-02-28 20:18:37"
+Cp0204,"Chinese Simplified",45,72,0,0,0,0,0,"2019-08-20 11:04:27"
+"cc (cavaz)",Italian,44,41,0,0,0,0,0,"2017-04-01 04:21:08"
+"Boban Jagertraum (boban40)",Czech,43,38,0,2,1,1,0,"2017-03-31 09:39:16"
+"Kamil Dziadek (prso94)",Polish,43,39,0,0,2,0,0,"2020-04-06 17:12:06"
+"Me Me (gentelwom)",Arabic,42,40,0,0,0,0,0,"2020-11-08 20:44:01"
+"Ali Elsheikh (aelsheikh1987)",Arabic,42,41,0,0,0,0,0,"2021-06-16 10:17:26"
+"Balázs Keresztury (belidzs)",Hungarian,42,41,501,0,7,0,38,"2017-04-06 02:40:24"
+andreea.muscalagiu,Romanian,42,52,0,1,0,0,0,"2017-10-22 07:19:49"
+"Mateusz Duda (MateuszDuda)",Polish,42,42,0,0,0,0,0,"2021-08-17 11:27:11"
+MStefanov,Bulgarian,41,55,2,0,2,0,2,"2017-03-31 16:09:02"
+"Sofia Veijonen (Suklaa) (sofia.veijonen)",Finnish,40,33,0,0,0,0,0,"2018-03-07 09:24:22"
+"Ali Zali (stm19951995)",Persian,40,60,0,0,0,0,0,"2020-03-23 19:57:26"
+"Limin Lu (liminlu)","Chinese Simplified",39,79,503,0,0,0,39,"2017-03-31 09:49:35"
+dusanstrgar,Slovenian,39,41,0,0,0,0,0,"2017-03-31 10:30:28"
+Anshoe,Tamil,38,65,0,14,0,0,0,"2018-01-02 11:06:52"
+anasshm,Arabic,37,36,0,9,0,0,0,"2019-01-27 04:07:22"
+hrexen,Armenian,37,37,0,0,0,0,0,"2020-12-09 02:30:34"
+"Abdulrahman (D7M)",Arabic,36,39,0,0,0,0,0,"2020-01-29 18:55:30"
+"Maria Chushnyakova (maria.ch)",Russian,36,31,0,3,0,0,0,"2021-08-17 03:23:58"
+REMOVED_USER,Swedish,36,33,0,5,1,0,0,"2018-09-29 17:47:33"
+"長谷川知里 (chase0213)",Japanese,34,138,0,13,0,0,24,"2018-12-14 10:52:44"
+"Luis E. Perichon (luisperichon)",Spanish,33,40,0,104,0,0,0,"2017-09-04 13:46:06"
+"Piotr Łuczyński (peterluczynski)",Polish,33,30,0,6,5,0,2,"2020-01-29 07:27:40"
+"milad farahani (miladfarmahini90)",Persian,33,44,0,18,1,0,3,"2017-08-31 16:09:00"
+andriikozytskyi2625,Ukrainian,31,23,0,0,0,0,0,"2019-07-08 00:16:41"
+Moastafa,Arabic,31,25,0,0,0,0,0,"2020-07-06 11:37:53"
+"hamza gamal (hamzagamal4444)",Arabic,31,28,0,0,0,0,0,"2020-08-03 15:23:34"
+REMOVED_USER,Russian,31,30,0,2,4,0,3,"2018-12-03 23:55:47"
+JoeLi,"Chinese Traditional",31,70,0,12,0,0,24,"2017-06-25 05:32:48"
+yancyn,"Chinese Simplified",30,40,0,0,0,0,1,"2020-05-18 20:06:03"
+"비니몬youtube (khj01025276475)",Korean,29,25,0,0,0,0,0,"2020-02-09 20:44:35"
+"Ruud Schouten (ruudschouten)",Dutch,29,32,0,41,3,0,0,"2017-07-22 17:49:17"
+"Aaron Dalton (Perlkonig)",French,26,25,0,141,1,0,0,"2018-01-14 12:58:19"
+"Niraj Yadav (neverforgetniraj)",Hindi,26,48,0,0,0,0,0,"2017-04-11 02:26:50"
+"Guillaume Collic (gcollic)",French,26,28,0,126,11,0,0,"2017-05-05 16:13:00"
+"Radoslaw Biernacki (radoslaw.biernacki)",Polish,26,24,0,8,0,0,1,"2020-12-15 17:55:31"
+"Jonny I (jonny99dj)",Italian,26,26,0,5,0,0,0,"2017-10-07 07:35:34"
+"Eddie (eddieattaboy)","Chinese Traditional",25,34,0,1,0,0,0,"2020-11-04 21:48:05"
+Pan_Filuta,Czech,25,21,0,5,4,0,3,"2017-04-29 12:55:14"
+"eduard83 (barbany.eduard)",Catalan,24,25,0,2,0,0,0,"2019-06-26 14:59:47"
+"Ľuboš Čaky (lubos.caky)",Slovak,23,22,0,0,0,0,0,"2019-07-02 16:51:44"
+"Caner Başaran (basarancaner)",Turkish,23,21,0,0,21,0,0,"2017-04-09 06:34:59"
+hodanli,Turkish,22,26,0,0,1,0,0,"2017-11-03 14:33:41"
+gnu-ewm,Polish,22,23,0,6,0,0,0,"2021-02-24 03:42:01"
+"Neeraj Verma (verma.neeraj.in)",Hindi,22,37,0,0,1,0,0,"2018-07-23 07:16:41"
+"Alcarkse (alexis.brusle)",French,21,25,0,7,11,0,0,"2017-08-06 09:32:29"
+olbotta,Italian,20,25,0,2,0,0,0,"2021-06-06 04:22:55"
+"Shashwat (goforgold)",Hindi,20,33,0,0,0,0,0,"2020-05-17 10:34:42"
+"Magdalena Urbańczyk (madziia139)",Polish,19,19,0,0,0,0,0,"2017-10-21 03:01:04"
+sheeCesu,French,19,18,0,48,4,0,0,"2017-12-21 17:01:39"
+can13,Turkish,19,14,0,8,0,0,0,"2021-01-03 10:39:03"
+"İsa Eş (IsaEs)",Turkish,19,17,0,0,6,1,0,"2017-06-20 07:30:22"
+"사자솥 (toke1597)",Korean,19,19,0,0,0,0,0,"2020-02-04 13:36:11"
+axikman11111,Uyghur,18,19,0,0,0,0,0,"2018-10-13 12:25:31"
+"Hoon Jung (hooni100)",Korean,17,10,0,0,0,0,0,"2021-01-03 02:26:54"
+"Ceara Lopez (cealopez)",Spanish,17,18,0,0,5,1,0,"2017-08-22 22:56:13"
+takoyakibento,Korean,17,13,0,3,0,0,0,"2020-08-01 08:44:15"
+Adeline31,French,17,20,0,3,0,0,0,"2019-12-06 00:00:11"
+engineeringforgood,Russian,16,15,0,0,0,0,16,"2021-01-22 03:32:35"
+bretzel15,German,16,20,0,0,0,0,0,"2020-04-06 02:49:14"
+"Şamil Ateşoğlu (m.samilatesoglu)",Turkish,16,22,0,11,6,3,0,"2017-07-05 18:37:08"
+DebatablySane,Bulgarian,16,15,0,48,0,0,0,"2017-07-10 15:13:18"
+"Bhava Tharini (bhavidanush)",Tamil,15,37,0,0,0,0,0,"2019-10-09 05:43:11"
+"Zeynep Esen (nezihaesen50)",Turkish,14,13,0,0,0,0,0,"2020-01-28 07:05:15"
+"Fikret Bilici (fikretbilici)",Turkish,14,13,0,0,0,0,0,"2020-06-21 17:16:11"
+"EuiHo Hwang (euiho.hwang)",Korean,14,16,0,0,0,0,0,"2020-06-23 02:40:01"
+"Zeeshan Rabbani (Zeera)",Hindi,14,25,0,0,0,0,0,"2020-09-15 11:32:01"
+"Faiz Ahamed (faiznewton)",Tamil,14,31,0,0,0,0,0,"2021-05-06 23:06:46"
+"Anastasia Borchuk (al2.borchuk)",Russian,14,14,0,0,0,0,0,"2020-04-14 13:22:49"
+iamsurajbobade,Hindi,14,30,0,0,0,0,0,"2018-05-21 11:23:27"
+"Sanji Vinsmock (mukanzhanbolat4)",Russian,14,14,0,0,0,0,0,"2020-02-18 12:38:54"
+"Maro Chr (caprisunglasses)",Greek,14,17,0,0,0,0,0,"2021-08-17 06:53:33"
+"Nenad Vukotic (vukotic.nenad)","Serbian (Cyrillic)",13,13,0,1,2,6,0,"2019-01-31 14:29:15"
+"Uwe Mönks (schirinowski)",German,13,12,0,0,0,0,0,"2021-02-18 04:00:41"
+"Dave (xdave)",Hungarian,13,11,0,0,0,0,0,"2020-03-02 20:56:50"
+soura2,Arabic,12,13,0,0,0,0,0,"2020-01-13 19:23:47"
+"shreyas (techiespace)",Hindi,12,20,0,0,0,0,0,"2018-06-10 01:14:26"
+"Sonu Sharma (riteetude)",Hindi,11,23,0,0,0,0,0,"2021-05-30 19:38:00"
+Vmrc,French,11,12,0,2,0,0,0,"2020-11-02 05:35:06"
+"Jo Chuang (josephch405)","Chinese Traditional",11,24,0,0,0,0,11,"2017-06-16 20:21:06"
+"sathvic k (sathvictripleseven)",Telugu,10,17,0,0,0,0,0,"2020-09-11 08:11:32"
+"Brian Camacho (bmcamacho)",Polish,10,11,0,0,1,0,0,"2020-08-03 02:27:28"
+"Anonymous edgy nerd (yamentaad)",Arabic,10,13,0,1,0,0,0,"2018-05-06 09:23:57"
+"Edwin van Rooij (edwinvrooij)",Dutch,10,13,0,17,0,0,0,"2018-11-05 03:59:10"
+"Mihael Wagner (miha.wagner)",Slovenian,10,9,0,7,0,0,0,"2017-10-18 18:26:29"
+"Ahmed Mosaad (ahmed.mosaad2018)",Arabic,10,12,0,6,0,0,0,"2021-02-03 18:45:43"
+"Suhaili Hassan (kucingsyg96)",Indonesian,9,10,0,0,0,0,0,"2018-06-10 11:55:09"
+"Martin Vostatek (martinvostatek)",Czech,9,8,0,32,2,0,0,"2019-01-21 13:52:36"
+"Seweryn Piotrowski (Draxxsx)",Polish,9,10,0,0,19,0,0,"2020-01-02 09:55:48"
+"Sourire Lucide (sourire_lucide)",Russian,9,10,0,0,1,0,0,"2018-03-22 01:37:55"
+Rex123,Persian,8,8,0,0,0,0,0,"2017-07-01 00:47:42"
+"Andrey ZaXeLoN (waragaa)",Russian,7,7,0,8,1,0,0,"2017-09-18 21:37:42"
+"Konstantin (KZhidovinov)",Russian,7,7,0,0,0,0,0,"2020-01-29 13:35:12"
+"Андрій Козицький (andriikozytskyi3807)",Ukrainian,7,12,0,2,0,0,0,"2020-09-26 20:31:56"
+ftfoi,Norwegian,7,6,0,0,0,0,0,"2020-04-11 20:42:35"
+"Vladimir Pavlychev (KeyJoo)",Russian,7,9,0,0,0,0,0,"2017-12-18 02:46:56"
+pkorove,Greek,7,7,0,0,0,0,0,"2020-03-07 11:36:12"
+erfan2927,Persian,6,6,0,0,0,0,0,"2018-04-09 02:12:44"
+"Burak Ceylan (7burakceylan)",Turkish,6,6,0,0,0,0,0,"2018-05-20 17:24:19"
+"Sam (SorodonSorodon)",German,6,6,0,13,0,0,0,"2017-04-14 11:09:27"
+"닉닉 (seohu9466)",Korean,6,14,0,13,0,0,0,"2017-10-09 23:08:15"
+"Sarita Cajas (sarayanacajas)",Spanish,6,4,0,0,1,0,0,"2021-05-14 14:27:59"
+ChloeLiang,Japanese,6,22,0,0,1,0,3,"2017-08-08 05:02:59"
+"Manuel Tassi (Mannivu)",Italian,5,6,0,0,0,0,0,"2021-01-03 11:00:33"
+"Tomáš Hrabáček (Hrabyyy)",Czech,5,3,0,0,0,0,0,"2021-05-27 11:58:11"
+"Guerra Ivaneth (rossanaiva-04)",Spanish,5,7,0,0,0,0,0,"2019-02-03 16:48:59"
+"Дмитрий Хапенков (d.khapenkov)",Russian,5,5,0,6,4,0,2,"2018-01-06 23:00:43"
+"Matthias Joly (joly.matt12)",French,5,8,0,27,1,0,0,"2017-08-28 09:53:59"
+"Micaela Pighin (micaelapiighin)",Spanish,5,6,0,1,0,0,0,"2019-10-09 23:32:42"
+andriikozytskyi2018,Ukrainian,5,5,0,0,0,0,0,"2017-09-03 05:24:43"
+marmo,German,4,4,0,0,0,0,0,"2021-01-13 01:16:35"
+"Eli Besirov (elibesirov07)",Turkish,4,4,0,0,0,0,0,"2019-03-25 07:12:34"
+"Lopo Isaac Fernández (rocapata)",Spanish,4,3,0,0,0,0,0,"2018-09-20 11:46:22"
+bziuum,Polish,4,4,0,0,0,0,0,"2020-09-01 09:08:01"
+"Neko123 (emandic11)","Serbian (Cyrillic)",4,4,0,57,0,0,0,"2021-04-21 15:33:29"
+Magidxz,Arabic,3,3,0,0,0,0,0,"2021-01-05 05:02:54"
+"mohammadali barati (mabaraty)",Persian,3,3,0,0,0,0,0,"2021-07-10 05:54:44"
+"Sarath S (CyberShark)",Tamil,3,7,0,0,0,0,0,"2020-08-27 22:43:16"
+"Unnie Here (Carb)",Hindi,3,8,0,0,0,0,0,"2020-03-18 23:34:35"
+REMOVED_USER,"Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-11-18 09:02:37"
+"Thoum Ptrgnt (thomas.petrignet)",French,3,3,0,2,0,3,0,"2017-09-23 19:25:52"
+"Oleg Kogut (kogut_oleg)",Ukrainian,3,3,0,0,0,0,0,"2018-12-28 14:31:02"
+carsten_kafke,German,3,3,0,43,0,0,3,"2017-10-27 13:27:47"
+"Vagner Roberto (vagner.trompete)","Portuguese, Brazilian",3,3,0,0,0,0,0,"2017-12-30 17:54:26"
+"Igor Piskun (i_piskun)",Ukrainian,3,3,0,0,0,0,0,"2018-01-19 15:20:27"
+"Andrea Bianchi (andreawhite1597)",Italian,3,1,0,1,0,0,0,"2018-01-21 17:45:48"
+"Cláudio Bernardo (claudiobernardo.ti)","Portuguese, Brazilian",3,4,0,1,0,0,0,"2019-01-08 14:41:10"
+"Hiohana Rilary (hiohanarilary)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2019-07-31 20:42:20"
+"joabe gabriel (joabegabrielcma1)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-08-21 09:08:59"
+"Péter Bernát (bernatp)",Hungarian,3,2,0,0,0,0,0,"2019-11-30 15:50:33"
+"Martin Zimdahl (zimdahlmartin)",Swedish,3,2,0,0,1,0,3,"2018-09-15 04:39:22"
+"Gabriel Cavalcante (gabrielc.alves14)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-08-06 22:24:54"
+atomjani,Hungarian,3,3,0,0,0,0,0,"2019-01-19 00:49:25"
+"أم محمد تقي (souadboudia19)",Arabic,2,2,0,0,0,0,0,"2020-06-13 15:24:17"
+"FAy FAy (fayfayfay52)","Chinese Traditional",2,5,0,0,0,0,0,"2017-10-06 08:53:21"
+chavs1997,Russian,2,2,0,9,0,0,0,"2018-05-18 16:58:19"
+Soroor_SI,Persian,2,2,0,0,0,0,0,"2018-06-10 06:28:27"
+"Ilyas Fekhar (il47yas)",Arabic,2,2,0,0,0,0,0,"2018-04-17 22:00:41"
+"hesamiranii (esam.matouri)",Persian,2,2,0,0,0,0,0,"2018-09-22 16:33:36"
+"fatemeh s (fargolseifoori3)",Persian,2,2,0,0,0,0,0,"2019-01-31 12:06:57"
+amei,"Portuguese, Brazilian",2,2,0,0,0,0,0,"2018-04-19 19:42:28"
+"Naveen jai krishna (njsbpolymer1)",Tamil,2,5,0,0,0,0,0,"2020-01-10 14:19:41"
+"Danial Agh (danialagh)",Persian,2,3,0,0,0,0,0,"2019-03-30 13:24:16"
+"Walid Baazia (walidbaazia2005)",Arabic,2,1,0,0,0,0,0,"2021-01-27 12:47:34"
+"Ali Zaida (alizaeda92)",Arabic,2,2,0,0,0,0,0,"2019-12-01 11:47:00"
+LNDDYL,"Chinese Traditional",2,4,0,0,0,0,2,"2018-04-22 04:00:19"
+"Ño Bí Tã (pt614553)",Arabic,2,8,0,1,0,0,0,"2021-05-22 20:41:01"
+"Judith Ayala (Azul1612)",Spanish,2,1,0,0,0,1,0,"2021-05-18 17:07:19"
+REMOVED_USER,Ukrainian,2,2,0,0,0,0,0,"2017-06-15 12:24:44"
+"Valerij D (vala.dobler)",German,2,2,0,0,0,0,0,"2018-09-22 09:38:27"
+"Alex Stein (diefaust1993)",Russian,2,2,0,4,4,0,2,"2017-07-13 06:56:17"
+"조화정 (yunjoo337)",Korean,2,2,0,0,0,0,0,"2019-06-16 22:25:31"
+omerfarukbas,Turkish,2,3,0,19,2,0,0,"2017-08-14 16:10:35"
+"Balthazar Aubard (Balatzar)",French,2,5,0,0,1,0,0,"2017-09-23 01:42:57"
+"Luca Gori (grolcu)",Italian,1,2,0,0,0,0,0,"2020-09-26 23:26:15"
+axd,Spanish,1,1,0,15,0,0,0,"2017-09-12 05:48:51"
+iSoron2,"Portuguese, Brazilian",1,1,0,0,0,0,0,"2017-03-18 17:56:29"
+REMOVED_USER,Russian,1,2,0,6,1,0,1,"2019-12-26 05:37:01"
+"Wibi Cahyo (wbcahyoh)",Indonesian,1,3,0,0,0,0,0,"2017-12-14 06:35:58"
+jonesses,German,1,1,0,1,0,0,1,"2021-01-01 08:03:18"
+"Anton (tT0NG)","Chinese Traditional",1,2,0,0,0,0,1,"2017-07-06 14:18:39"
+"박찌 (perpact20)",Korean,1,1,0,0,0,0,0,"2018-02-10 10:11:44"
+"Alan Jeon (skyisle)",Korean,1,2,0,8,0,0,0,"2018-01-09 10:46:00"
+"Maria Fefelova (mashafefel)",Russian,1,1,0,0,0,0,0,"2019-05-18 02:03:56"
+"Anastasiia Bondarenko (nastasya.bondarenko.97)",Russian,1,1,0,0,0,0,0,"2019-06-07 17:43:08"
+"Kan Black (kanblack.va)",Vietnamese,1,2,0,0,0,1,0,"2019-01-15 03:50:10"
+"Patrick Pimenta (trickap1)","Portuguese, Brazilian",1,1,0,0,0,0,0,"2018-12-01 14:31:21"
+"Dagna Q (dagnaq)",,0,0,0,0,0,0,0,"2017-08-06 01:42:52"
+Kamalakannan,,0,0,0,0,0,0,0,"2017-05-14 11:40:23"
+"Éjbãss Übbeî (littlebittlebottle)",Norwegian,0,0,0,152,0,0,0,"2017-07-05 21:12:02"
+"Равиль Мифтахов (ravilmif47)",Russian,0,0,0,1,0,0,0,"2019-08-12 21:58:30"
+sanyoniket,,0,0,0,0,0,0,0,"2019-07-23 12:58:40"
+REMOVED_USER,,0,0,0,0,0,0,0,"2020-02-01 03:47:48"
+"vi ve (VimalV)",,0,0,0,0,0,0,0,"2021-02-08 02:35:45"
+"George Merkulov (george142.emarket)",Russian,0,0,0,11,0,0,0,"2019-06-09 19:47:02"
+"Yasin Okumus (lacivert)",Turkish,0,0,0,1,0,0,0,"2018-02-07 04:13:51"
+"Petros Bleyan (coolbleyan)",Russian,0,0,0,14,0,0,0,"2017-08-18 18:37:18"
+"LeMeD (LeMeS)",French,0,0,0,2,0,0,0,"2021-02-06 15:35:00"
+ava_rfie,Persian,0,0,0,1,0,0,0,"2019-06-09 16:19:24"
+"Mateusz Teteruk (mttet)",Polish,0,0,0,1,0,0,0,"2021-01-23 13:09:59"
+EwanB,,0,0,0,0,0,0,0,"2019-11-19 10:04:38"
+Fazy1380,,0,0,0,0,0,0,0,"2021-04-10 11:02:53"
+"Lori Amico (lavodkaclyde2323)",Italian,0,0,0,1,0,0,0,"2017-04-09 10:08:13"
+"Florian Stuhlmann (stuhlmann)",German,0,0,0,10,0,0,0,"2017-04-15 04:04:00"
+"عبد الناصر سعيد الثبيتي (asaeed)",,0,0,0,0,0,0,0,"2018-03-13 02:09:35"
+"Rivo Zängov (Eraser)",,0,0,0,0,0,0,0,"2020-10-13 04:38:26"
+Hayder21,,0,0,0,0,0,0,0,"2019-12-31 10:56:24"
+T-v-Gerwen,Dutch,0,0,0,47,0,0,0,"2018-03-02 10:26:33"
+"Eduard Boboc (edi.boboc33)",Romanian,0,0,0,4,0,0,0,"2019-12-16 09:08:39"
+"Samuel Przeździęk (samek22)",Polish,0,0,0,1,0,0,0,"2021-08-01 00:49:01"
+"Saiprasath B (Saiprasath)",,0,0,0,0,0,0,0,"2021-07-11 11:10:41"
+shuvo786,,0,0,0,0,0,0,0,"2019-11-13 00:18:12"
+"Edmunds Edmundam (edmundam)",,0,0,0,0,0,0,0,"2020-06-01 14:18:18"
+Itch,,0,0,0,0,0,0,0,"2017-10-16 09:18:42"
+"Manny Farsangy (manifarsangi)",Persian,0,0,0,12,0,0,0,"2021-08-10 05:32:28"
+"Matus Zdansky (matuszdansky)",,0,0,0,0,0,0,0,"2019-10-20 13:52:24"
+"Thomas Orlita (Thomas995)",Czech,0,0,0,1,0,0,0,"2017-12-24 04:08:27"
+Irsgram,Russian,0,0,0,1,0,0,0,"2019-09-30 16:42:20"
+EmanAmini,,0,0,0,0,0,0,0,"2017-03-31 13:27:43"
+mushin,,0,0,0,0,0,0,0,"2020-02-02 04:08:05"
+"Elmo (oberknecht)",,0,0,0,0,0,0,0,"2020-04-16 08:45:50"
+AnggaRifandi,,0,0,0,0,0,0,0,"2017-03-31 19:28:35"
+"darkkingredian (rediancool)",,0,0,0,0,0,0,0,"2021-07-27 16:04:32"
+"Sri Harsha Bhogi (sriharshabhogi)",,0,0,0,0,0,0,0,"2018-09-02 05:31:53"
+"Nat Fomicheva (natac)",Russian,0,0,0,3,0,0,0,"2019-01-25 14:35:02"
+mdrobulis,,0,0,0,0,0,0,0,"2018-05-24 01:40:42"
+"Sarah BCNN (fsarahboucenna)",French,0,0,0,16,0,0,0,"2018-02-11 11:07:36"
+"Arjun K. (arjunkdot)",,0,0,0,0,0,0,0,"2020-09-20 11:16:18"
+REMOVED_USER,Czech,0,0,0,18,0,0,0,"2018-03-27 06:19:52"
+martyaberger,,0,0,0,0,0,0,0,"2019-01-01 18:48:08"
+BongTran,Vietnamese,0,0,0,2,0,0,0,"2018-04-24 05:16:07"
+"Arttu Ylhävuori (arttu.ylhavuori)",,0,0,0,0,0,0,0,"2019-07-24 15:03:42"
+"Никита Карамов (nikita.karamoff)",Russian,0,0,0,10,0,0,0,"2018-10-29 03:57:21"
+rooban23,,0,0,0,0,0,0,0,"2020-09-15 11:49:14"
+"Eliška Roubalová (roubaeli)",Czech,0,0,0,6,0,0,0,"2019-12-31 12:47:29"
+valney.faria,"Portuguese, Brazilian",0,0,0,1,0,0,0,"2020-02-02 14:45:02"
+"Алтынбек Наурызғали (altinbeknaurizgali)",Russian,0,0,0,1,0,0,0,"2020-08-12 13:03:49"
+REMOVED_USER,,0,0,0,0,0,0,0,"2018-10-27 15:34:36"
+REMOVED_USER,,0,0,0,0,0,0,0,"2018-08-24 00:17:43"
+Elham1361,,0,0,0,0,0,0,0,"2018-10-27 12:01:06"
+dongchen.yue,German,0,0,0,4,0,0,0,"2020-09-12 15:05:59"
+"Ahnaf Tajwar (atn4404)",,0,0,0,0,0,0,0,"2018-10-16 11:13:30"
+AsadullahIlyas,,0,0,0,0,0,0,0,"2019-01-04 06:14:15"
+droidahmed,Arabic,0,0,0,7,0,0,0,"2018-01-31 02:18:49"
+philfr49,French,0,0,0,2,0,0,0,"2018-09-03 14:20:32"
+"Ahmed Nazir (ahmednazir333)",,0,0,0,0,0,0,0,"2018-05-06 12:10:27"
+"Balaji Jayaraman (jkbalaji1103)",,0,0,0,0,0,0,0,"2017-10-30 22:12:27"
+"Wellington Ribeiro (wellington.rib)",,0,0,0,0,0,0,0,"2017-11-16 07:32:25"
+"Javid IRAN (twitteriran98)",Persian,0,0,0,1,0,0,0,"2017-11-25 16:47:25"
+"박인호 (wphestiraid)",Korean,0,0,0,2,0,0,0,"2018-01-05 00:33:14"
+"Pumpith Ungsupanit (pumpithu)",,0,0,0,0,0,0,0,"2019-01-19 23:47:57"
+Sandhu564.,,0,0,0,0,0,0,0,"2020-12-14 01:27:45"
+"Quentin Hibon (hiq)",,0,0,0,0,0,0,0,"2021-02-07 16:39:31"
+AhmedDz,Arabic,0,0,0,1,0,0,0,"2017-12-31 10:12:31"
+"Shuvashish Sahoo (shuvashish76)",,0,0,0,0,0,0,0,"2020-09-17 09:10:09"
+REMOVED_USER,,0,0,0,0,0,0,0,"2018-01-05 16:56:12"
+NairaDNV,Spanish,0,0,0,9,0,0,0,"2018-01-05 19:10:33"
+Raulbertassi,,0,0,0,0,0,0,0,"2018-01-07 17:23:18"
+"Карлен Шаухаев (KarlenShaukhaev)",,0,0,0,0,0,0,0,"2020-04-27 08:53:49"
+dimateos,,0,0,0,0,0,0,0,"2021-01-10 06:29:52"
+"Katherine Alexandra Flórez Ramírez (katherine.florez12)",Spanish,0,0,0,46,0,0,0,"2018-01-20 02:18:32"
+"reza golestanzadeh (reza.golestanzadeh)",Persian,0,0,0,1,0,0,0,"2020-10-21 12:07:20"
+farbod66,Persian,0,0,0,1,0,0,0,"2018-01-20 11:04:23"
+"Muhammet Furkan ALMACI (furkan.almaci)",Turkish,0,0,0,1,0,0,0,"2017-10-29 13:44:56"
diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts
index d6996f857..02c87a2e3 100644
--- a/uhabits-android/build.gradle.kts
+++ b/uhabits-android/build.gradle.kts
@@ -20,7 +20,7 @@
*/
plugins {
- id("com.github.triplet.play") version "3.2.0"
+ id("com.github.triplet.play") version "3.5.0"
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.kapt")
@@ -37,8 +37,8 @@ android {
compileSdkVersion(30)
defaultConfig {
- versionCode(20001)
- versionName("2.0.1")
+ versionCode(20003)
+ versionName("2.0.3")
minSdkVersion(23)
targetSdkVersion(30)
applicationId("org.isoron.uhabits")
@@ -88,11 +88,11 @@ android {
}
dependencies {
- val daggerVersion = "2.35.1"
- val kotlinVersion = "1.5.0"
- val kxCoroutinesVersion = "1.4.2"
- val ktorVersion = "1.5.4"
- val espressoVersion = "3.3.0"
+ val daggerVersion = "2.38.1"
+ val kotlinVersion = "1.5.21"
+ val kxCoroutinesVersion = "1.5.1"
+ val ktorVersion = "1.6.2"
+ val espressoVersion = "3.4.0"
androidTestImplementation("androidx.test.espresso:espresso-contrib:$espressoVersion")
androidTestImplementation("androidx.test.espresso:espresso-core:$espressoVersion")
@@ -101,9 +101,9 @@ dependencies {
androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion")
androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion")
androidTestImplementation("androidx.annotation:annotation:1.2.0")
- androidTestImplementation("androidx.test.ext:junit:1.1.2")
+ androidTestImplementation("androidx.test.ext:junit:1.1.3")
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
- androidTestImplementation("androidx.test:rules:1.3.0")
+ androidTestImplementation("androidx.test:rules:1.4.0")
androidTestImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
compileOnly("javax.annotation:jsr250-api:1.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5")
@@ -118,12 +118,12 @@ dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kxCoroutinesVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kxCoroutinesVersion")
- implementation("androidx.appcompat:appcompat:1.2.0")
+ implementation("androidx.appcompat:appcompat:1.3.1")
implementation("androidx.legacy:legacy-preference-v14:1.0.0")
implementation("androidx.legacy:legacy-support-v4:1.0.0")
- implementation("com.google.android.material:material:1.3.0")
+ implementation("com.google.android.material:material:1.4.0")
implementation("com.google.zxing:core:3.4.1")
- implementation("com.opencsv:opencsv:5.4")
+ implementation("com.opencsv:opencsv:5.5.1")
implementation(project(":uhabits-core"))
kapt("com.google.dagger:dagger-compiler:$daggerVersion")
kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion")
diff --git a/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidget/render.png b/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidget/render.png
index 42147c832..642264b62 100644
Binary files a/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidget/render.png and b/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidget/render.png differ
diff --git a/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/checked.png b/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/checked.png
index 46ac8fd03..f5a3df56e 100644
Binary files a/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/checked.png and b/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/checked.png differ
diff --git a/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/large_size.png b/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/large_size.png
index 68b695bca..ea1aab565 100644
Binary files a/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/large_size.png and b/uhabits-android/src/androidTest/assets/views/widgets/CheckmarkWidgetView/large_size.png differ
diff --git a/uhabits-android/src/androidTest/assets/views/widgets/TargetWidget/render.png b/uhabits-android/src/androidTest/assets/views/widgets/TargetWidget/render.png
index 739e0fca3..4a8fa7f9f 100644
Binary files a/uhabits-android/src/androidTest/assets/views/widgets/TargetWidget/render.png and b/uhabits-android/src/androidTest/assets/views/widgets/TargetWidget/render.png differ
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.kt
index 3cc5f14fc..9cbfc1f9c 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/HabitFixtures.kt
@@ -23,10 +23,10 @@ import org.isoron.uhabits.core.models.Entry.Companion.YES_MANUAL
import org.isoron.uhabits.core.models.Frequency
import org.isoron.uhabits.core.models.Frequency.Companion.DAILY
import org.isoron.uhabits.core.models.Habit
-import org.isoron.uhabits.core.models.Habit.Companion.AT_LEAST
-import org.isoron.uhabits.core.models.Habit.Companion.NUMBER_HABIT
import org.isoron.uhabits.core.models.HabitList
+import org.isoron.uhabits.core.models.HabitType
import org.isoron.uhabits.core.models.ModelFactory
+import org.isoron.uhabits.core.models.NumericalHabitType
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday
@@ -102,8 +102,8 @@ class HabitFixtures(private val modelFactory: ModelFactory, private val habitLis
val habit = modelFactory.buildHabit().apply {
name = "Read"
question = "How many pages did you walk today?"
- type = NUMBER_HABIT
- targetType = AT_LEAST
+ type = HabitType.NUMERICAL
+ targetType = NumericalHabitType.AT_LEAST
targetValue = 200.0
unit = "pages"
}
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt
index bcd4a18dd..3d71853ec 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt
@@ -23,6 +23,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardPresenter.Companion.buildState
+import org.isoron.uhabits.core.ui.views.LightTheme
import org.isoron.uhabits.utils.toFixedAndroidColor
import org.junit.Before
import org.junit.Test
@@ -39,7 +40,12 @@ class ScoreChartTest : BaseViewTest() {
super.setUp()
fixtures.purgeHabits(habitList)
habit = fixtures.createLongHabit()
- val state = buildState(habit, prefs.firstWeekdayInt, 0)
+ val state = buildState(
+ habit = habit,
+ firstWeekday = prefs.firstWeekdayInt,
+ spinnerPosition = 0,
+ theme = LightTheme(),
+ )
view = ScoreChart(targetContext).apply {
setScores(state.scores)
setColor(state.color.toFixedAndroidColor())
@@ -72,7 +78,7 @@ class ScoreChartTest : BaseViewTest() {
@Test
@Throws(Throwable::class)
fun testRender_withMonthlyBucket() {
- val (scores, bucketSize) = buildState(habit, prefs.firstWeekdayInt, 2)
+ val (scores, bucketSize) = buildState(habit, prefs.firstWeekdayInt, 2, LightTheme())
view.setScores(scores)
view.setBucketSize(bucketSize)
view.invalidate()
@@ -89,7 +95,7 @@ class ScoreChartTest : BaseViewTest() {
@Test
@Throws(Throwable::class)
fun testRender_withYearlyBucket() {
- val state = buildState(habit, prefs.firstWeekdayInt, 4)
+ val state = buildState(habit, prefs.firstWeekdayInt, 4, LightTheme())
view.setScores(state.scores)
view.setBucketSize(state.bucketSize)
view.invalidate()
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardViewTest.kt
index 2d9b2687c..c26b55775 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardViewTest.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardViewTest.kt
@@ -25,6 +25,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.FrequencyCardPresenter
+import org.isoron.uhabits.core.ui.views.LightTheme
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -43,7 +44,13 @@ class FrequencyCardViewTest : BaseViewTest() {
.from(targetContext)
.inflate(R.layout.show_habit, null)
.findViewById(R.id.frequencyCard) as FrequencyCardView
- view.setState(FrequencyCardPresenter.buildState(habit = habit, firstWeekday = 0))
+ view.setState(
+ FrequencyCardPresenter.buildState(
+ habit = habit,
+ firstWeekday = 0,
+ theme = LightTheme(),
+ )
+ )
measureView(view, 800f, 600f)
}
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardViewTest.kt
index 46efbc146..9a5fc81d3 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardViewTest.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardViewTest.kt
@@ -26,6 +26,7 @@ import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.ui.screens.habits.show.views.OverviewCardState
+import org.isoron.uhabits.core.ui.views.LightTheme
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -50,6 +51,7 @@ class OverviewCardViewTest : BaseViewTest() {
scoreYearDiff = 0.74f,
totalCount = 44,
color = PaletteColor(7),
+ theme = LightTheme(),
)
)
measureView(view, 800f, 300f)
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardViewTest.kt
index b695c3a7b..8bd2bc520 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardViewTest.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardViewTest.kt
@@ -25,6 +25,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardPresenter.Companion.buildState
+import org.isoron.uhabits.core.ui.views.LightTheme
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -43,7 +44,14 @@ class ScoreCardViewTest : BaseViewTest() {
.from(targetContext)
.inflate(R.layout.show_habit, null)
.findViewById(R.id.scoreCard) as ScoreCardView
- view.setState(buildState(habit = habit, firstWeekday = 0, spinnerPosition = 0))
+ view.setState(
+ buildState(
+ habit = habit,
+ firstWeekday = 0,
+ spinnerPosition = 0,
+ theme = LightTheme(),
+ )
+ )
measureView(view, 800f, 600f)
}
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardViewTest.kt
index ebf581a04..2c70e3b92 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardViewTest.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/StreakCardViewTest.kt
@@ -25,6 +25,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.StreakCardState
+import org.isoron.uhabits.core.ui.views.LightTheme
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -47,6 +48,7 @@ class StreakCardViewTest : BaseViewTest() {
StreakCardState(
bestStreaks = habit.streaks.getBest(10),
color = habit.color,
+ theme = LightTheme(),
)
)
measureView(view, 800f, 600f)
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardViewTest.kt
index 63c700404..a43543936 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardViewTest.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardViewTest.kt
@@ -28,6 +28,7 @@ import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.models.Reminder
import org.isoron.uhabits.core.models.WeekdayList.Companion.EVERY_DAY
import org.isoron.uhabits.core.ui.screens.habits.show.views.SubtitleCardState
+import org.isoron.uhabits.core.ui.views.LightTheme
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -54,6 +55,7 @@ class SubtitleCardViewTest : BaseViewTest() {
reminder = Reminder(8, 30, EVERY_DAY),
unit = "",
targetValue = 0.0,
+ theme = LightTheme(),
)
)
measureView(view, 800f, 200f)
diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.kt
index 37538e758..f3a842f04 100644
--- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.kt
+++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetViewTest.kt
@@ -50,7 +50,7 @@ class CheckmarkWidgetViewTest : BaseViewTest() {
name = habit.name
}
view.refresh()
- measureView(view, dpToPixels(100), dpToPixels(200))
+ measureView(view, dpToPixels(100), dpToPixels(125))
}
@Test
diff --git a/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidCanvas.kt b/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidCanvas.kt
index b4ff1d5e5..ae1d1f52f 100644
--- a/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidCanvas.kt
+++ b/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidCanvas.kt
@@ -36,6 +36,7 @@ class AndroidCanvas : Canvas {
var innerDensity = 1.0
var innerWidth = 0
var innerHeight = 0
+ var mHeight = 15
var paint = Paint().apply {
isAntiAlias = true
@@ -64,11 +65,10 @@ class AndroidCanvas : Canvas {
}
override fun drawText(text: String, x: Double, y: Double) {
- textPaint.getTextBounds(text, 0, text.length, textBounds)
innerCanvas.drawText(
text,
x.toDp(),
- y.toDp() - textBounds.exactCenterY(),
+ y.toDp() + 0.6f * mHeight,
textPaint,
)
}
@@ -126,10 +126,17 @@ class AndroidCanvas : Canvas {
Font.BOLD -> Typeface.DEFAULT_BOLD
Font.FONT_AWESOME -> getFontAwesome(context)
}
+ updateMHeight()
}
override fun setFontSize(size: Double) {
textPaint.textSize = size.toDp()
+ updateMHeight()
+ }
+
+ private fun updateMHeight() {
+ textPaint.getTextBounds("m", 0, 1, textBounds)
+ mHeight = textBounds.height()
}
override fun setStrokeWidth(size: Double) {
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt
index 855adaa84..be9d0eb02 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/AndroidThemeSwitcher.kt
@@ -30,6 +30,7 @@ import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.ui.ThemeSwitcher
import org.isoron.uhabits.core.ui.views.DarkTheme
import org.isoron.uhabits.core.ui.views.LightTheme
+import org.isoron.uhabits.core.ui.views.PureBlackTheme
import org.isoron.uhabits.core.ui.views.Theme
import org.isoron.uhabits.inject.ActivityContext
import org.isoron.uhabits.inject.ActivityScope
@@ -66,7 +67,7 @@ constructor(
}
override fun applyPureBlackTheme() {
- currentTheme = DarkTheme()
+ currentTheme = PureBlackTheme()
context.setTheme(R.style.AppBaseThemeDark_PureBlack)
(context as Activity).window.navigationBarColor =
ContextCompat.getColor(context, R.color.black)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt
index 250a3b211..5eeb67f19 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt
@@ -26,6 +26,7 @@ import org.isoron.uhabits.BuildConfig
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.AboutBinding
+import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.setupToolbar
@SuppressLint("ViewConstructor")
@@ -41,7 +42,8 @@ class AboutView(
setupToolbar(
toolbar = binding.toolbar,
color = PaletteColor(11),
- title = resources.getString(R.string.about)
+ title = resources.getString(R.string.about),
+ theme = currentTheme(),
)
val version = resources.getString(R.string.version_n)
binding.tvContributors.setOnClickListener { screen.showCodeContributorsWebsite() }
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.kt
index ac393d506..e4cfa015b 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/ColorPickerDialogFactory.kt
@@ -19,20 +19,21 @@
package org.isoron.uhabits.activities.common.dialogs
import android.content.Context
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor
+import org.isoron.uhabits.core.ui.views.Theme
import org.isoron.uhabits.inject.ActivityContext
import org.isoron.uhabits.inject.ActivityScope
import org.isoron.uhabits.utils.StyledResources
-import org.isoron.uhabits.utils.toThemedAndroidColor
import javax.inject.Inject
@ActivityScope
class ColorPickerDialogFactory @Inject constructor(@param:ActivityContext private val context: Context) {
- fun create(color: PaletteColor): ColorPickerDialog {
+ fun create(color: PaletteColor, theme: Theme): ColorPickerDialog {
val dialog = ColorPickerDialog()
val res = StyledResources(context)
- val androidColor = color.toThemedAndroidColor(context)
+ val androidColor = theme.color(color).toInt()
dialog.initialize(
R.string.color_picker_default_title,
res.getPalette(),
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt
index 0971ffab6..92754ca89 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/FrequencyPickerDialog.kt
@@ -160,26 +160,28 @@ class FrequencyPickerDialog(
private fun populateViews() {
uncheckAll()
- if (freqNumerator == 1) {
- if (freqDenominator == 1) {
- contentView.everyDayRadioButton.isChecked = true
- } else {
- contentView.everyXDaysRadioButton.isChecked = true
- contentView.everyXDaysTextView.setText(freqDenominator.toString())
- focus(contentView.everyXDaysTextView)
- }
+ if (freqDenominator == 30 || freqDenominator == 31) {
+ contentView.xTimesPerMonthRadioButton.isChecked = true
+ contentView.xTimesPerMonthTextView.setText(freqNumerator.toString())
+ focus(contentView.xTimesPerMonthTextView)
} else {
- if (freqDenominator == 7) {
- contentView.xTimesPerWeekRadioButton.isChecked = true
- contentView.xTimesPerWeekTextView.setText(freqNumerator.toString())
- focus(contentView.xTimesPerWeekTextView)
- } else if (freqDenominator == 30 || freqDenominator == 31) {
- contentView.xTimesPerMonthRadioButton.isChecked = true
- contentView.xTimesPerMonthTextView.setText(freqNumerator.toString())
- focus(contentView.xTimesPerMonthTextView)
+ if (freqNumerator == 1) {
+ if (freqDenominator == 1) {
+ contentView.everyDayRadioButton.isChecked = true
+ } else {
+ contentView.everyXDaysRadioButton.isChecked = true
+ contentView.everyXDaysTextView.setText(freqDenominator.toString())
+ focus(contentView.everyXDaysTextView)
+ }
} else {
- Log.w("FrequencyPickerDialog", "Unknown frequency: $freqNumerator/$freqDenominator")
- contentView.everyDayRadioButton.isChecked = true
+ if (freqDenominator == 7) {
+ contentView.xTimesPerWeekRadioButton.isChecked = true
+ contentView.xTimesPerWeekTextView.setText(freqNumerator.toString())
+ focus(contentView.xTimesPerWeekTextView)
+ } else {
+ Log.w("FrequencyPickerDialog", "Unknown frequency: $freqNumerator/$freqDenominator")
+ contentView.everyDayRadioButton.isChecked = true
+ }
}
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.kt
index 5f8a09395..41c5f5602 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/BundleSavedState.kt
@@ -41,7 +41,7 @@ class BundleSavedState : AbsSavedState {
}
companion object {
- val CREATOR: Parcelable.Creator =
+ @JvmField val CREATOR: Parcelable.Creator =
object : ClassLoaderCreator {
override fun createFromParcel(
source: Parcel,
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt
index 8f552f50b..4a3b10679 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/RingView.kt
@@ -41,6 +41,7 @@ import org.isoron.uhabits.utils.InterfaceUtils.getFontAwesome
import org.isoron.uhabits.utils.InterfaceUtils.spToPixels
import org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor
import org.isoron.uhabits.utils.StyledResources
+import kotlin.math.max
import kotlin.math.min
import kotlin.math.roundToLong
@@ -48,7 +49,7 @@ class RingView : View {
private var color: Int
private var precision: Float
private var percentage: Float
- private var diameter = 0
+ private var diameter = 1
private var thickness: Float
private var rect: RectF? = null
private var pRing: TextPaint? = null
@@ -169,7 +170,7 @@ class RingView : View {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val width = MeasureSpec.getSize(widthMeasureSpec)
val height = MeasureSpec.getSize(heightMeasureSpec)
- diameter = min(height, width)
+ diameter = max(1, min(height, width))
pRing!!.textSize = textSize
em = pRing!!.measureText("M")
setMeasuredDimension(diameter, diameter)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TargetChart.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TargetChart.kt
index b03c748c1..1d19cbedb 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TargetChart.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TargetChart.kt
@@ -117,7 +117,11 @@ class TargetChart : View {
barRect[rect.left + stop + padding, rect.top + baseSize * 0.05f, rect.right - padding] =
rect.bottom - baseSize * 0.05f
canvas.drawRoundRect(barRect, round, round, paint!!)
- var percentage = (values[row] / targets[row]).toFloat()
+ var percentage = if (targets[row] > 0) {
+ (values[row] / targets[row]).toFloat()
+ } else {
+ 1.0f
+ }
percentage = min(1.0f, percentage)
// Draw completed box
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt
index 78fa9df5f..548fdc5f5 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/TaskProgressBar.kt
@@ -29,10 +29,10 @@ class TaskProgressBar(
context: Context,
private val runner: TaskRunner
) : ProgressBar(
- context,
- null,
- android.R.attr.progressBarStyleHorizontal
- ),
+ context,
+ null,
+ android.R.attr.progressBarStyleHorizontal
+),
TaskRunner.Listener {
init {
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt
index 289caa867..09acc4049 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt
@@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.habits.edit
import android.annotation.SuppressLint
import android.content.res.ColorStateList
+import android.content.res.Resources
import android.graphics.Color
import android.os.Bundle
import android.text.Html
@@ -39,6 +40,7 @@ import kotlinx.android.synthetic.main.activity_edit_habit.notesInput
import kotlinx.android.synthetic.main.activity_edit_habit.questionInput
import kotlinx.android.synthetic.main.activity_edit_habit.targetInput
import kotlinx.android.synthetic.main.activity_edit_habit.unitInput
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher
@@ -50,6 +52,8 @@ import org.isoron.uhabits.core.commands.CreateHabitCommand
import org.isoron.uhabits.core.commands.EditHabitCommand
import org.isoron.uhabits.core.models.Frequency
import org.isoron.uhabits.core.models.Habit
+import org.isoron.uhabits.core.models.HabitType
+import org.isoron.uhabits.core.models.NumericalHabitType
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.models.Reminder
import org.isoron.uhabits.core.models.WeekdayList
@@ -57,7 +61,16 @@ import org.isoron.uhabits.databinding.ActivityEditHabitBinding
import org.isoron.uhabits.utils.ColorUtils
import org.isoron.uhabits.utils.formatTime
import org.isoron.uhabits.utils.toFormattedString
-import org.isoron.uhabits.utils.toThemedAndroidColor
+
+fun formatFrequency(freqNum: Int, freqDen: Int, resources: Resources) = when {
+ freqNum == 1 && (freqDen == 30 || freqDen == 31) -> resources.getString(R.string.every_month)
+ freqDen == 30 || freqDen == 31 -> resources.getString(R.string.x_times_per_month, freqNum)
+ freqNum == 1 && freqDen == 1 -> resources.getString(R.string.every_day)
+ freqNum == 1 && freqDen == 7 -> resources.getString(R.string.every_week)
+ freqNum == 1 && freqDen > 1 -> resources.getString(R.string.every_x_days, freqDen)
+ freqDen == 7 -> resources.getString(R.string.x_times_per_week, freqNum)
+ else -> "$freqNum/$freqDen"
+}
class EditHabitActivity : AppCompatActivity() {
@@ -66,7 +79,7 @@ class EditHabitActivity : AppCompatActivity() {
private lateinit var commandRunner: CommandRunner
var habitId = -1L
- var habitType = -1
+ lateinit var habitType: HabitType
var unit = ""
var color = PaletteColor(11)
var androidColor = 0
@@ -105,12 +118,12 @@ class EditHabitActivity : AppCompatActivity() {
binding.unitInput.setText(habit.unit)
binding.targetInput.setText(habit.targetValue.toString())
} else {
- habitType = intent.getIntExtra("habitType", Habit.YES_NO_HABIT)
+ habitType = HabitType.fromInt(intent.getIntExtra("habitType", HabitType.YES_NO.value))
}
if (state != null) {
habitId = state.getLong("habitId")
- habitType = state.getInt("habitType")
+ habitType = HabitType.fromInt(state.getInt("habitType"))
color = PaletteColor(state.getInt("paletteColor"))
freqNum = state.getInt("freqNum")
freqDen = state.getInt("freqDen")
@@ -121,13 +134,16 @@ class EditHabitActivity : AppCompatActivity() {
updateColors()
- if (habitType == Habit.YES_NO_HABIT) {
- binding.unitOuterBox.visibility = View.GONE
- binding.targetOuterBox.visibility = View.GONE
- } else {
- binding.nameInput.hint = getString(R.string.measurable_short_example)
- binding.questionInput.hint = getString(R.string.measurable_question_example)
- binding.frequencyOuterBox.visibility = View.GONE
+ when (habitType) {
+ HabitType.YES_NO -> {
+ binding.unitOuterBox.visibility = View.GONE
+ binding.targetOuterBox.visibility = View.GONE
+ }
+ HabitType.NUMERICAL -> {
+ binding.nameInput.hint = getString(R.string.measurable_short_example)
+ binding.questionInput.hint = getString(R.string.measurable_question_example)
+ binding.frequencyOuterBox.visibility = View.GONE
+ }
}
setSupportActionBar(binding.toolbar)
@@ -137,7 +153,7 @@ class EditHabitActivity : AppCompatActivity() {
val colorPickerDialogFactory = ColorPickerDialogFactory(this)
binding.colorButton.setOnClickListener {
- val dialog = colorPickerDialogFactory.create(color)
+ val dialog = colorPickerDialogFactory.create(color, themeSwitcher.currentTheme)
dialog.setListener { paletteColor ->
this.color = paletteColor
updateColors()
@@ -244,9 +260,9 @@ class EditHabitActivity : AppCompatActivity() {
}
habit.frequency = Frequency(freqNum, freqDen)
- if (habitType == Habit.NUMBER_HABIT) {
+ if (habitType == HabitType.NUMERICAL) {
habit.targetValue = targetInput.text.toString().toDouble()
- habit.targetType = Habit.AT_LEAST
+ habit.targetType = NumericalHabitType.AT_LEAST
habit.unit = unitInput.text.trim().toString()
}
habit.type = habitType
@@ -274,7 +290,7 @@ class EditHabitActivity : AppCompatActivity() {
nameInput.error = getFormattedValidationError(R.string.validation_cannot_be_blank)
isValid = false
}
- if (habitType == Habit.NUMBER_HABIT) {
+ if (habitType == HabitType.NUMERICAL) {
if (targetInput.text.isEmpty()) {
targetInput.error = getString(R.string.validation_cannot_be_blank)
isValid = false
@@ -299,14 +315,7 @@ class EditHabitActivity : AppCompatActivity() {
@SuppressLint("StringFormatMatches")
private fun populateFrequency() {
- binding.booleanFrequencyPicker.text = when {
- freqNum == 1 && freqDen == 1 -> getString(R.string.every_day)
- freqNum == 1 && freqDen == 7 -> getString(R.string.every_week)
- freqNum == 1 && freqDen > 1 -> getString(R.string.every_x_days, freqDen)
- freqDen == 7 -> getString(R.string.x_times_per_week, freqNum)
- freqDen == 30 || freqDen == 31 -> getString(R.string.x_times_per_month, freqNum)
- else -> "$freqNum/$freqDen"
- }
+ binding.booleanFrequencyPicker.text = formatFrequency(freqNum, freqDen, resources)
binding.numericalFrequencyPicker.text = when (freqDen) {
1 -> getString(R.string.every_day)
7 -> getString(R.string.every_week)
@@ -316,7 +325,7 @@ class EditHabitActivity : AppCompatActivity() {
}
private fun updateColors() {
- androidColor = color.toThemedAndroidColor(this)
+ androidColor = themeSwitcher.currentTheme.color(color).toInt()
binding.colorButton.backgroundTintList = ColorStateList.valueOf(androidColor)
if (!themeSwitcher.isNightMode) {
val darkerAndroidColor = ColorUtils.mixColors(Color.BLACK, androidColor, 0.15f)
@@ -334,7 +343,7 @@ class EditHabitActivity : AppCompatActivity() {
super.onSaveInstanceState(state)
with(state) {
putLong("habitId", habitId)
- putInt("habitType", habitType)
+ putInt("habitType", habitType.value)
putInt("paletteColor", color.paletteIndex)
putInt("androidColor", androidColor)
putInt("freqNum", freqNum)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/HabitTypeDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/HabitTypeDialog.kt
index 382dab282..25ba9537e 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/HabitTypeDialog.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/HabitTypeDialog.kt
@@ -25,7 +25,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDialogFragment
import org.isoron.uhabits.R
-import org.isoron.uhabits.core.models.Habit
+import org.isoron.uhabits.core.models.HabitType
import org.isoron.uhabits.databinding.SelectHabitTypeBinding
import org.isoron.uhabits.intents.IntentFactory
@@ -40,13 +40,13 @@ class HabitTypeDialog : AppCompatDialogFragment() {
val binding = SelectHabitTypeBinding.inflate(inflater, container, false)
binding.buttonYesNo.setOnClickListener {
- val intent = IntentFactory().startEditActivity(activity!!, Habit.YES_NO_HABIT)
+ val intent = IntentFactory().startEditActivity(activity!!, HabitType.YES_NO.value)
startActivity(intent)
dismiss()
}
binding.buttonMeasurable.setOnClickListener {
- val intent = IntentFactory().startEditActivity(activity!!, Habit.NUMBER_HABIT)
+ val intent = IntentFactory().startEditActivity(activity!!, HabitType.NUMERICAL.value)
startActivity(intent)
dismiss()
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt
index 6059b3cd9..e9ed0980f 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt
@@ -40,7 +40,7 @@ import org.isoron.uhabits.inject.ActivityContextModule
import org.isoron.uhabits.inject.DaggerHabitsActivityComponent
import org.isoron.uhabits.utils.restartWithFade
-class ListHabitsActivity : AppCompatActivity() {
+class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
var pureBlack: Boolean = false
lateinit var taskRunner: TaskRunner
@@ -54,6 +54,10 @@ class ListHabitsActivity : AppCompatActivity() {
private lateinit var menu: ListHabitsMenu
+ override fun onQuestionMarksChanged() {
+ invalidateOptionsMenu()
+ }
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -66,6 +70,7 @@ class ListHabitsActivity : AppCompatActivity() {
component.themeSwitcher.apply()
prefs = appComponent.preferences
+ prefs.addListener(this)
syncManager = appComponent.syncManager
pureBlack = prefs.isPureBlackEnabled
midnightTimer = appComponent.midnightTimer
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt
index 6d223c288..c92d0dd3f 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsMenu.kt
@@ -52,6 +52,11 @@ class ListHabitsMenu @Inject constructor(
nightModeItem.isChecked = themeSwitcher.isNightMode
hideArchivedItem.isChecked = !preferences.showArchived
hideCompletedItem.isChecked = !preferences.showCompleted
+ if (preferences.areQuestionMarksEnabled || preferences.isSkipEnabled) {
+ hideCompletedItem.title = activity.resources.getString(R.string.hide_entered)
+ } else {
+ hideCompletedItem.title = activity.resources.getString(R.string.hide_completed)
+ }
updateArrows(menu)
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt
index 8295a41db..faa13173a 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsRootView.kt
@@ -44,6 +44,7 @@ import org.isoron.uhabits.utils.addAtBottom
import org.isoron.uhabits.utils.addAtTop
import org.isoron.uhabits.utils.addBelow
import org.isoron.uhabits.utils.buildToolbar
+import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.dim
import org.isoron.uhabits.utils.dp
import org.isoron.uhabits.utils.setupToolbar
@@ -93,6 +94,7 @@ class ListHabitsRootView @Inject constructor(
title = resources.getString(R.string.main_activity_title),
color = PaletteColor(17),
displayHomeAsUpEnabled = false,
+ theme = currentTheme(),
)
addView(rootView, MATCH_PARENT, MATCH_PARENT)
listAdapter.setListView(listView)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt
index 6168ed781..9b27c5f82 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsScreen.kt
@@ -231,7 +231,7 @@ class ListHabitsScreen
}
override fun showColorPicker(defaultColor: PaletteColor, callback: OnColorPickedCallback) {
- val picker = colorPickerFactory.create(defaultColor)
+ val picker = colorPickerFactory.create(defaultColor, themeSwitcher.currentTheme!!)
picker.setListener(callback)
picker.show(activity.supportFragmentManager, "picker")
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt
index 913449df1..e11d23868 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/CheckmarkButtonView.kt
@@ -131,7 +131,7 @@ class CheckmarkButtonView(
paint.color = when (value) {
YES_MANUAL, YES_AUTO, SKIP -> color
NO -> {
- if (preferences.areQuestionMarksEnabled()) mediumContrastColor
+ if (preferences.areQuestionMarksEnabled) mediumContrastColor
else lowContrastColor
}
else -> lowContrastColor
@@ -140,7 +140,7 @@ class CheckmarkButtonView(
SKIP -> R.string.fa_skipped
NO -> R.string.fa_times
UNKNOWN -> {
- if (preferences.areQuestionMarksEnabled()) R.string.fa_question
+ if (preferences.areQuestionMarksEnabled) R.string.fa_question
else R.string.fa_times
}
else -> R.string.fa_check
@@ -153,7 +153,7 @@ class CheckmarkButtonView(
paint.style = Paint.Style.FILL
}
- paint.textSize = when (value) {
+ paint.textSize = when (id) {
UNKNOWN -> dim(R.dimen.smallerTextSize)
else -> dim(R.dimen.smallTextSize)
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
index 2318f2ccc..c59b61ec1 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/HabitCardView.kt
@@ -33,6 +33,7 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.FrameLayout
import android.widget.LinearLayout
import android.widget.TextView
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
import org.isoron.uhabits.activities.common.views.RingView
import org.isoron.uhabits.core.models.Habit
@@ -41,9 +42,9 @@ import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.ui.screens.habits.list.ListHabitsBehavior
import org.isoron.uhabits.core.utils.DateUtils
import org.isoron.uhabits.inject.ActivityContext
+import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.dp
import org.isoron.uhabits.utils.sres
-import org.isoron.uhabits.utils.toThemedAndroidColor
import javax.inject.Inject
class HabitCardViewFactory
@@ -213,7 +214,7 @@ class HabitCardView(
fun getActiveColor(habit: Habit): Int {
return when (habit.isArchived) {
true -> sres.getColor(R.attr.contrast60)
- false -> habit.color.toThemedAndroidColor(context)
+ false -> currentTheme().color(habit.color).toInt()
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt
index f4f7cc4ac..3e48ed1a6 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/views/NumberButtonView.kt
@@ -169,7 +169,7 @@ class NumberButtonView(
typeface = BOLD_TYPEFACE
textSize = dim(R.dimen.smallTextSize)
}
- preferences.areQuestionMarksEnabled() -> {
+ preferences.areQuestionMarksEnabled -> {
label = resources.getString(R.string.fa_question)
typeface = getFontAwesome()
textSize = dim(R.dimen.smallerTextSize)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt
index fb1e37f4c..38fba3baf 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt
@@ -35,7 +35,12 @@ class ShowHabitView(context: Context) : FrameLayout(context) {
}
fun setState(data: ShowHabitState) {
- setupToolbar(binding.toolbar, title = data.title, color = data.color)
+ setupToolbar(
+ binding.toolbar,
+ title = data.title,
+ color = data.color,
+ theme = data.theme,
+ )
binding.subtitleCard.setState(data.subtitle)
binding.overviewCard.setState(data.overview)
binding.notesCard.setState(data.notes)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt
index 6effbd597..fa3122ed3 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt
@@ -24,12 +24,12 @@ import android.view.LayoutInflater
import android.view.View
import android.widget.AdapterView
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.platform.time.JavaLocalDateFormatter
import org.isoron.uhabits.core.ui.screens.habits.show.views.BarCardPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.views.BarCardState
import org.isoron.uhabits.core.ui.views.BarChart
import org.isoron.uhabits.databinding.ShowHabitBarBinding
-import org.isoron.uhabits.utils.toThemedAndroidColor
import java.util.Locale
class BarCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
@@ -37,7 +37,7 @@ class BarCardView(context: Context, attrs: AttributeSet) : LinearLayout(context,
private var binding = ShowHabitBarBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: BarCardState) {
- val androidColor = state.color.toThemedAndroidColor(context)
+ val androidColor = state.theme.color(state.color).toInt()
binding.chart.view = BarChart(state.theme, JavaLocalDateFormatter(Locale.US)).apply {
series = mutableListOf(state.entries.map { it.value / 1000.0 })
colors = mutableListOf(theme.color(state.color.paletteIndex))
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardView.kt
index 526431f25..cf7daf769 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/FrequencyCardView.kt
@@ -22,16 +22,16 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.core.ui.screens.habits.show.views.FrequencyCardState
import org.isoron.uhabits.databinding.ShowHabitFrequencyBinding
-import org.isoron.uhabits.utils.toThemedAndroidColor
class FrequencyCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private var binding = ShowHabitFrequencyBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: FrequencyCardState) {
- val androidColor = state.color.toThemedAndroidColor(context)
+ val androidColor = state.theme.color(state.color).toInt()
binding.frequencyChart.setFrequency(state.frequency)
binding.frequencyChart.setFirstWeekday(state.firstWeekday)
binding.title.setTextColor(androidColor)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt
index 7950d6195..c60e84bd1 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/HistoryCardView.kt
@@ -22,12 +22,12 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.platform.time.JavaLocalDateFormatter
import org.isoron.uhabits.core.ui.screens.habits.show.views.HistoryCardPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.views.HistoryCardState
import org.isoron.uhabits.core.ui.views.HistoryChart
import org.isoron.uhabits.databinding.ShowHabitHistoryBinding
-import org.isoron.uhabits.utils.toThemedAndroidColor
import java.util.Locale
class HistoryCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
@@ -35,7 +35,7 @@ class HistoryCardView(context: Context, attrs: AttributeSet) : LinearLayout(cont
private var binding = ShowHabitHistoryBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: HistoryCardState) {
- val androidColor = state.color.toThemedAndroidColor(context)
+ val androidColor = state.theme.color(state.color).toInt()
binding.title.setTextColor(androidColor)
binding.chart.view = HistoryChart(
today = state.today,
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardView.kt
index aa5b0cd02..62a83e412 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/OverviewCardView.kt
@@ -22,11 +22,11 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.OverviewCardState
import org.isoron.uhabits.databinding.ShowHabitOverviewBinding
import org.isoron.uhabits.utils.StyledResources
-import org.isoron.uhabits.utils.toThemedAndroidColor
import kotlin.math.abs
class OverviewCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
@@ -42,7 +42,7 @@ class OverviewCardView(context: Context, attrs: AttributeSet) : LinearLayout(con
}
fun setState(state: OverviewCardState) {
- val androidColor = state.color.toThemedAndroidColor(context)
+ val androidColor = state.theme.color(state.color).toInt()
val res = StyledResources(context)
val inactiveColor = res.getColor(R.attr.contrast60)
binding.monthDiffLabel.setTextColor(if (state.scoreMonthDiff >= 0) androidColor else inactiveColor)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardView.kt
index e5c740574..943e3eb07 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/ScoreCardView.kt
@@ -24,16 +24,16 @@ import android.view.LayoutInflater
import android.view.View
import android.widget.AdapterView
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardState
import org.isoron.uhabits.databinding.ShowHabitScoreBinding
-import org.isoron.uhabits.utils.toThemedAndroidColor
class ScoreCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private var binding = ShowHabitScoreBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: ScoreCardState) {
- val androidColor = state.color.toThemedAndroidColor(context)
+ val androidColor = state.theme.color(state.color).toInt()
binding.title.setTextColor(androidColor)
binding.spinner.setSelection(state.spinnerPosition)
binding.scoreView.setScores(state.scores)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCardView.kt
index 613e71fab..f2faa5f26 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/StreakCardView.kt
@@ -22,16 +22,16 @@ import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.core.ui.screens.habits.show.views.StreakCardState
import org.isoron.uhabits.databinding.ShowHabitStreakBinding
-import org.isoron.uhabits.utils.toThemedAndroidColor
class StreakCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private val binding = ShowHabitStreakBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: StreakCardState) {
- val color = state.color.toThemedAndroidColor(context)
- binding.title.setTextColor(color)
- binding.streakChart.setColor(color)
+ val androidColor = state.theme.color(state.color).toInt()
+ binding.title.setTextColor(androidColor)
+ binding.streakChart.setColor(androidColor)
binding.streakChart.setStreaks(state.bestStreaks)
postInvalidate()
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardView.kt
index 7b0cc407b..49c67aae1 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/SubtitleCardView.kt
@@ -20,19 +20,18 @@ package org.isoron.uhabits.activities.habits.show.views
import android.annotation.SuppressLint
import android.content.Context
-import android.content.res.Resources
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
+import org.isoron.uhabits.activities.habits.edit.formatFrequency
import org.isoron.uhabits.activities.habits.list.views.toShortString
-import org.isoron.uhabits.core.models.Frequency
import org.isoron.uhabits.core.ui.screens.habits.show.views.SubtitleCardState
import org.isoron.uhabits.databinding.ShowHabitSubtitleBinding
import org.isoron.uhabits.utils.InterfaceUtils
import org.isoron.uhabits.utils.formatTime
-import org.isoron.uhabits.utils.toThemedAndroidColor
class SubtitleCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
@@ -47,9 +46,13 @@ class SubtitleCardView(context: Context, attrs: AttributeSet) : LinearLayout(con
@SuppressLint("SetTextI18n")
fun setState(state: SubtitleCardState) {
- val color = state.color.toThemedAndroidColor(context)
+ val color = state.theme.color(state.color).toInt()
val reminder = state.reminder
- binding.frequencyLabel.text = state.frequency.format(resources)
+ binding.frequencyLabel.text = formatFrequency(
+ state.frequency.numerator,
+ state.frequency.denominator,
+ resources,
+ )
binding.questionLabel.setTextColor(color)
binding.questionLabel.text = state.question
binding.reminderLabel.text = if (reminder != null) {
@@ -72,32 +75,4 @@ class SubtitleCardView(context: Context, attrs: AttributeSet) : LinearLayout(con
postInvalidate()
}
-
- @SuppressLint("StringFormatMatches")
- private fun Frequency.format(resources: Resources): String {
- val num = this.numerator
- val den = this.denominator
- if (num == den) {
- return resources.getString(R.string.every_day)
- }
- if (den == 7) {
- return resources.getString(R.string.x_times_per_week, num)
- }
- if (den == 30 || den == 31) {
- return resources.getString(R.string.x_times_per_month, num)
- }
- if (num == 1) {
- if (den == 7) {
- return resources.getString(R.string.every_week)
- }
- if (den % 7 == 0) {
- return resources.getString(R.string.every_x_weeks, den / 7)
- }
- if (den == 30 || den == 31) {
- return resources.getString(R.string.every_month)
- }
- return resources.getString(R.string.every_x_days, den)
- }
- return "$num/$den"
- }
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/TargetCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/TargetCardView.kt
index 13c71989b..b44cf2f3c 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/TargetCardView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/TargetCardView.kt
@@ -23,15 +23,15 @@ import android.content.res.Resources
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.TargetCardState
import org.isoron.uhabits.databinding.ShowHabitTargetBinding
-import org.isoron.uhabits.utils.toThemedAndroidColor
class TargetCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private val binding = ShowHabitTargetBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: TargetCardState) {
- val androidColor = state.color.toThemedAndroidColor(context)
+ val androidColor = state.theme.color(state.color).toInt()
binding.targetChart.setValues(state.values)
binding.targetChart.setTargets(state.targets)
binding.targetChart.setLabels(state.intervals.map { intervalToLabel(resources, it) })
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt
index f759607ed..60a12ac17 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt
@@ -32,13 +32,15 @@ class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val component = (application as HabitsApplication).component
- AndroidThemeSwitcher(this, component.preferences).apply()
+ val themeSwitcher = AndroidThemeSwitcher(this, component.preferences)
+ themeSwitcher.apply()
val binding = SettingsActivityBinding.inflate(LayoutInflater.from(this))
binding.root.setupToolbar(
toolbar = binding.toolbar,
title = resources.getString(R.string.settings),
color = PaletteColor(11),
+ theme = themeSwitcher.currentTheme,
)
setContentView(binding.root)
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/sync/SyncActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/sync/SyncActivity.kt
index 5b84ef8c2..6b5c3f9f9 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/sync/SyncActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/sync/SyncActivity.kt
@@ -57,7 +57,8 @@ class SyncActivity : AppCompatActivity(), SyncBehavior.Screen {
val component = (application as HabitsApplication).component
val preferences = component.preferences
val server = RemoteSyncServer(preferences = preferences)
- AndroidThemeSwitcher(this, component.preferences).apply()
+ val themeSwitcher = AndroidThemeSwitcher(this, component.preferences)
+ themeSwitcher.apply()
behavior = SyncBehavior(this, preferences, server, component.logging)
binding = ActivitySyncBinding.inflate(layoutInflater)
@@ -66,6 +67,7 @@ class SyncActivity : AppCompatActivity(), SyncBehavior.Screen {
toolbar = binding.toolbar,
color = PaletteColor(11),
title = resources.getString(R.string.device_sync),
+ theme = themeSwitcher.currentTheme,
)
binding.syncLink.setOnClickListener { copyToClipboard() }
binding.instructions.text = Html.fromHtml(resources.getString(R.string.sync_instructions))
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt
index 442024149..30c13c95d 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingRootView.kt
@@ -33,6 +33,7 @@ import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.HabitList
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.AutomationBinding
+import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.setupToolbar
import java.util.LinkedList
@@ -53,6 +54,7 @@ class EditSettingRootView(
title = resources.getString(R.string.app_name),
color = PaletteColor(11),
displayHomeAsUpEnabled = false,
+ theme = currentTheme(),
)
populateHabitSpinner()
binding.habitSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt
index 0a195d9c0..5df329a95 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/PendingIntentFactory.kt
@@ -63,13 +63,14 @@ class PendingIntentFactory
FLAG_UPDATE_CURRENT
)
- fun removeRepetition(habit: Habit): PendingIntent =
+ fun removeRepetition(habit: Habit, timestamp: Timestamp?): PendingIntent =
getBroadcast(
context,
3,
Intent(context, WidgetReceiver::class.java).apply {
action = WidgetReceiver.ACTION_REMOVE_REPETITION
data = Uri.parse(habit.uriString)
+ if (timestamp != null) putExtra("timestamp", timestamp.unixTime)
},
FLAG_UPDATE_CURRENT
)
@@ -132,17 +133,17 @@ class PendingIntentFactory
timestamp: Long?
):
PendingIntent =
- getBroadcast(
- widgetContext,
- 2,
- Intent(widgetContext, WidgetReceiver::class.java).apply {
- data = Uri.parse(habit.uriString)
- action = WidgetReceiver.ACTION_SET_NUMERICAL_VALUE
- putExtra("numericalValue", numericalValue)
- if (timestamp != null) putExtra("timestamp", timestamp)
- },
- FLAG_UPDATE_CURRENT
- )
+ getBroadcast(
+ widgetContext,
+ 2,
+ Intent(widgetContext, WidgetReceiver::class.java).apply {
+ data = Uri.parse(habit.uriString)
+ action = WidgetReceiver.ACTION_SET_NUMERICAL_VALUE
+ putExtra("numericalValue", numericalValue)
+ if (timestamp != null) putExtra("timestamp", timestamp)
+ },
+ FLAG_UPDATE_CURRENT
+ )
fun updateWidgets(): PendingIntent =
getBroadcast(
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt
index de1c23d24..04f3d8d92 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/AndroidNotificationTray.kt
@@ -107,7 +107,7 @@ class AndroidNotificationTray
val removeRepetitionAction = Action(
R.drawable.ic_action_cancel,
context.getString(R.string.no),
- pendingIntents.removeRepetition(habit)
+ pendingIntents.removeRepetition(habit, timestamp)
)
val enterAction = Action(
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.kt
index d28bb2ba5..42514b118 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/notifications/SnoozeDelayPickerActivity.kt
@@ -28,6 +28,7 @@ import android.widget.AdapterView.OnItemClickListener
import androidx.fragment.app.FragmentActivity
import com.android.datetimepicker.time.RadialPickerLayout
import com.android.datetimepicker.time.TimePickerDialog
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher
@@ -35,14 +36,13 @@ import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.ui.ThemeSwitcher.Companion.THEME_LIGHT
import org.isoron.uhabits.receivers.ReminderController
import org.isoron.uhabits.utils.SystemUtils
-import org.isoron.uhabits.utils.toThemedAndroidColor
import java.util.Calendar
class SnoozeDelayPickerActivity : FragmentActivity(), OnItemClickListener {
private var habit: Habit? = null
private var reminderController: ReminderController? = null
private var dialog: AlertDialog? = null
- private var color: Int = 0
+ private var androidColor: Int = 0
override fun onCreate(bundle: Bundle?) {
super.onCreate(bundle)
@@ -63,7 +63,7 @@ class SnoozeDelayPickerActivity : FragmentActivity(), OnItemClickListener {
habit = appComponent.habitList.getById(ContentUris.parseId(data))
}
if (habit == null) finish()
- color = habit!!.color.toThemedAndroidColor(this)
+ androidColor = themeSwitcher.currentTheme.color(habit!!.color).toInt()
reminderController = appComponent.reminderController
dialog = AlertDialog.Builder(this)
.setTitle(R.string.select_snooze_delay)
@@ -85,7 +85,7 @@ class SnoozeDelayPickerActivity : FragmentActivity(), OnItemClickListener {
calendar[Calendar.HOUR_OF_DAY],
calendar[Calendar.MINUTE],
DateFormat.is24HourFormat(this),
- color
+ androidColor
)
dialog.show(supportFragmentManager, "timePicker")
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt
index 6c06021a8..ec78e5d6b 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/preferences/SharedPreferencesStorage.kt
@@ -92,6 +92,9 @@ class SharedPreferencesStorage
preferences.setNotificationsSticky(getBoolean(key, false))
"pref_led_notifications" ->
preferences.setNotificationsLed(getBoolean(key, false))
+ "pref_unknown_enabled" -> {
+ preferences.areQuestionMarksEnabled = getBoolean(key, false)
+ }
}
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.kt
index fe1575d25..5f120c6af 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/PaletteUtils.kt
@@ -21,7 +21,6 @@ package org.isoron.uhabits.utils
import android.content.Context
import android.graphics.Color
-import android.util.Log
import org.isoron.uhabits.core.models.PaletteColor
object PaletteUtils {
@@ -29,16 +28,6 @@ object PaletteUtils {
fun getAndroidTestColor(index: Int) = PaletteColor(index).toFixedAndroidColor()
}
-fun PaletteColor.toThemedAndroidColor(context: Context): Int {
- val palette = StyledResources(context).getPalette()
- return if (paletteIndex in palette.indices) {
- palette[paletteIndex]
- } else {
- Log.w("ColorHelper", "Invalid color: $paletteIndex. Returning default.")
- palette[0]
- }
-}
-
fun PaletteColor.toFixedAndroidColor(): Int {
return intArrayOf(
Color.parseColor("#D32F2F"), // 0 red
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt
index 936e58573..bfa64ebf0 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt
@@ -40,8 +40,12 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.content.FileProvider
import com.google.android.material.snackbar.Snackbar
+import org.isoron.platform.gui.toInt
+import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R
+import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.models.PaletteColor
+import org.isoron.uhabits.core.ui.views.Theme
import java.io.File
fun RelativeLayout.addBelow(
@@ -157,6 +161,7 @@ fun View.setupToolbar(
toolbar: Toolbar,
title: String,
color: PaletteColor,
+ theme: Theme,
displayHomeAsUpEnabled: Boolean = true,
) {
toolbar.elevation = InterfaceUtils.dpToPixels(context, 2f)
@@ -165,7 +170,7 @@ fun View.setupToolbar(
val toolbarColor = if (!res.getBoolean(R.attr.useHabitColorAsPrimary)) {
StyledResources(context).getColor(R.attr.colorPrimary)
} else {
- color.toThemedAndroidColor(context)
+ theme.color(color).toInt()
}
val darkerColor = ColorUtils.mixColors(toolbarColor, Color.BLACK, 0.75f)
toolbar.background = ColorDrawable(toolbarColor)
@@ -175,6 +180,13 @@ fun View.setupToolbar(
activity.supportActionBar?.setDisplayHomeAsUpEnabled(displayHomeAsUpEnabled)
}
+fun View.currentTheme(): Theme {
+ val component = (context.applicationContext as HabitsApplication).component
+ val themeSwitcher = AndroidThemeSwitcher(context, component.preferences)
+ themeSwitcher.apply()
+ return themeSwitcher.currentTheme
+}
+
fun Int.toMeasureSpec(mode: Int) =
View.MeasureSpec.makeMeasureSpec(this, mode)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.kt
index dae6db9ce..bc9654529 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidget.kt
@@ -32,6 +32,7 @@ import org.isoron.uhabits.core.commands.CommandRunner
import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.preferences.WidgetPreferences
import org.isoron.uhabits.intents.PendingIntentFactory
+import kotlin.math.max
abstract class BaseWidget(val context: Context, val id: Int, val stacked: Boolean) {
private val widgetPrefs: WidgetPreferences
@@ -103,8 +104,8 @@ abstract class BaseWidget(val context: Context, val id: Int, val stacked: Boolea
private fun getBitmapFromView(view: View): Bitmap {
view.invalidate()
- val width = view.measuredWidth
- val height = view.measuredHeight
+ val width = max(1, view.measuredWidth)
+ val height = max(1, view.measuredHeight)
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
view.draw(canvas)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.kt
index 6fae9fc9c..1a41d0f4f 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/BaseWidgetProvider.kt
@@ -109,7 +109,7 @@ abstract class BaseWidgetProvider : AppWidgetProvider() {
}
protected fun getHabitsFromWidgetId(widgetId: Int): List {
- val selectedIds = widgetPrefs.getHabitIdsFromWidgetId(widgetId)!!
+ val selectedIds = widgetPrefs.getHabitIdsFromWidgetId(widgetId)
val selectedHabits = ArrayList(selectedIds.size)
for (id in selectedIds) {
val h = habits.getById(id) ?: throw HabitNotFoundException()
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt
index f901cb8e6..f2814ff4d 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/CheckmarkWidget.kt
@@ -24,10 +24,11 @@ import android.content.Context
import android.os.Build
import android.view.View
import androidx.annotation.RequiresApi
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.core.models.Entry
import org.isoron.uhabits.core.models.Habit
+import org.isoron.uhabits.core.ui.views.WidgetTheme
import org.isoron.uhabits.core.utils.DateUtils
-import org.isoron.uhabits.utils.toThemedAndroidColor
import org.isoron.uhabits.widgets.views.CheckmarkWidgetView
open class CheckmarkWidget(
@@ -53,7 +54,7 @@ open class CheckmarkWidget(
(widgetView as CheckmarkWidgetView).apply {
val today = DateUtils.getTodayWithOffset()
setBackgroundAlpha(preferedBackgroundAlpha)
- activeColor = habit.color.toThemedAndroidColor(context)
+ activeColor = WidgetTheme().color(habit.color).toInt()
name = habit.name
entryValue = habit.computedEntries.get(today).value
if (habit.isNumerical) {
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt
index 7ebba0383..8ef1b4a48 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/FrequencyWidget.kt
@@ -22,9 +22,10 @@ package org.isoron.uhabits.widgets
import android.app.PendingIntent
import android.content.Context
import android.view.View
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.activities.common.views.FrequencyChart
import org.isoron.uhabits.core.models.Habit
-import org.isoron.uhabits.utils.toThemedAndroidColor
+import org.isoron.uhabits.core.ui.views.WidgetTheme
import org.isoron.uhabits.widgets.views.GraphWidgetView
class FrequencyWidget(
@@ -47,7 +48,7 @@ class FrequencyWidget(
if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f)
(widgetView.dataView as FrequencyChart).apply {
setFirstWeekday(firstWeekday)
- setColor(habit.color.toThemedAndroidColor(context))
+ setColor(WidgetTheme().color(habit.color).toInt())
setFrequency(habit.originalEntries.computeWeekdayFrequency(habit.isNumerical))
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt
index 34b8f523c..14ccc1d30 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/ScoreWidget.kt
@@ -22,10 +22,11 @@ package org.isoron.uhabits.widgets
import android.app.PendingIntent
import android.content.Context
import android.view.View
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.activities.common.views.ScoreChart
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardPresenter
-import org.isoron.uhabits.utils.toThemedAndroidColor
+import org.isoron.uhabits.core.ui.views.WidgetTheme
import org.isoron.uhabits.widgets.views.GraphWidgetView
class ScoreWidget(
@@ -44,7 +45,8 @@ class ScoreWidget(
val viewModel = ScoreCardPresenter.buildState(
habit = habit,
firstWeekday = prefs.firstWeekdayInt,
- spinnerPosition = prefs.scoreCardSpinnerPosition
+ spinnerPosition = prefs.scoreCardSpinnerPosition,
+ theme = WidgetTheme(),
)
val widgetView = view as GraphWidgetView
widgetView.setBackgroundAlpha(preferedBackgroundAlpha)
@@ -52,7 +54,7 @@ class ScoreWidget(
(widgetView.dataView as ScoreChart).apply {
setIsTransparencyEnabled(true)
setBucketSize(viewModel.bucketSize)
- setColor(habit.color.toThemedAndroidColor(context))
+ setColor(WidgetTheme().color(habit.color).toInt())
setScores(viewModel.scores)
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.kt
index 4c74ceb32..0e60914e5 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetService.kt
@@ -53,7 +53,7 @@ internal class StackRemoteViewsFactory(private val context: Context, intent: Int
AppWidgetManager.INVALID_APPWIDGET_ID
)
private val habitIds: LongArray
- private val widgetType: StackWidgetType?
+ private val widgetType: StackWidgetType
private var remoteViews = ArrayList()
override fun onCreate() {}
override fun onDestroy() {}
@@ -86,27 +86,27 @@ internal class StackRemoteViewsFactory(private val context: Context, intent: Int
override fun getViewAt(position: Int): RemoteViews? {
Log.i("StackRemoteViewsFactory", "getViewAt $position")
- return if (position < 0 || position > remoteViews.size) null else remoteViews[position]
+ return if (0 <= position && position < remoteViews.size) remoteViews[position] else null
}
private fun constructWidget(
habit: Habit,
prefs: Preferences
): BaseWidget {
- when (widgetType) {
- StackWidgetType.CHECKMARK -> return CheckmarkWidget(context, widgetId, habit, true)
- StackWidgetType.FREQUENCY -> return FrequencyWidget(
+ return when (widgetType) {
+ StackWidgetType.CHECKMARK -> CheckmarkWidget(context, widgetId, habit, true)
+ StackWidgetType.FREQUENCY -> FrequencyWidget(
context,
widgetId,
habit,
prefs.firstWeekdayInt,
true
)
- StackWidgetType.SCORE -> return ScoreWidget(context, widgetId, habit, true)
- StackWidgetType.HISTORY -> return HistoryWidget(context, widgetId, habit, true)
- StackWidgetType.STREAKS -> return StreakWidget(context, widgetId, habit, true)
+ StackWidgetType.SCORE -> ScoreWidget(context, widgetId, habit, true)
+ StackWidgetType.HISTORY -> HistoryWidget(context, widgetId, habit, true)
+ StackWidgetType.STREAKS -> StreakWidget(context, widgetId, habit, true)
+ StackWidgetType.TARGET -> TargetWidget(context, widgetId, habit, true)
}
- throw IllegalStateException()
}
override fun getLoadingView(): RemoteViews {
@@ -157,6 +157,7 @@ internal class StackRemoteViewsFactory(private val context: Context, intent: Int
if (widgetTypeValue < 0) throw RuntimeException("invalid widget type")
if (habitIdsStr == null) throw RuntimeException("habitIdsStr is null")
widgetType = StackWidgetType.getWidgetTypeFromValue(widgetTypeValue)
+ ?: throw RuntimeException("unknown widget type value: $widgetTypeValue")
habitIds = splitLongs(habitIdsStr)
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.kt
index ca120142b..68e8018aa 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StackWidgetType.kt
@@ -19,61 +19,59 @@
package org.isoron.uhabits.widgets
import org.isoron.uhabits.R
+import java.lang.IllegalStateException
-/**
- * Created by victoryu on 11/3/17.
- */
enum class StackWidgetType(val value: Int) {
CHECKMARK(0), FREQUENCY(1), SCORE(2), // habit strength widget
HISTORY(3), STREAKS(4), TARGET(5);
companion object {
fun getWidgetTypeFromValue(value: Int): StackWidgetType? {
- return when {
- CHECKMARK.value == value -> CHECKMARK
- FREQUENCY.value == value -> FREQUENCY
- SCORE.value == value -> SCORE
- HISTORY.value == value -> HISTORY
- STREAKS.value == value -> STREAKS
- TARGET.value == value -> TARGET
+ return when (value) {
+ CHECKMARK.value -> CHECKMARK
+ FREQUENCY.value -> FREQUENCY
+ SCORE.value -> SCORE
+ HISTORY.value -> HISTORY
+ STREAKS.value -> STREAKS
+ TARGET.value -> TARGET
else -> null
}
}
fun getStackWidgetLayoutId(type: StackWidgetType?): Int {
- when (type) {
- CHECKMARK -> return R.layout.checkmark_stackview_widget
- FREQUENCY -> return R.layout.frequency_stackview_widget
- SCORE -> return R.layout.score_stackview_widget
- HISTORY -> return R.layout.history_stackview_widget
- STREAKS -> return R.layout.streak_stackview_widget
- TARGET -> return R.layout.target_stackview_widget
+ return when (type) {
+ CHECKMARK -> R.layout.checkmark_stackview_widget
+ FREQUENCY -> R.layout.frequency_stackview_widget
+ SCORE -> R.layout.score_stackview_widget
+ HISTORY -> R.layout.history_stackview_widget
+ STREAKS -> R.layout.streak_stackview_widget
+ TARGET -> R.layout.target_stackview_widget
+ else -> throw IllegalStateException()
}
- return 0
}
fun getStackWidgetAdapterViewId(type: StackWidgetType?): Int {
- when (type) {
- CHECKMARK -> return R.id.checkmarkStackWidgetView
- FREQUENCY -> return R.id.frequencyStackWidgetView
- SCORE -> return R.id.scoreStackWidgetView
- HISTORY -> return R.id.historyStackWidgetView
- STREAKS -> return R.id.streakStackWidgetView
- TARGET -> return R.id.targetStackWidgetView
+ return when (type) {
+ CHECKMARK -> R.id.checkmarkStackWidgetView
+ FREQUENCY -> R.id.frequencyStackWidgetView
+ SCORE -> R.id.scoreStackWidgetView
+ HISTORY -> R.id.historyStackWidgetView
+ STREAKS -> R.id.streakStackWidgetView
+ TARGET -> R.id.targetStackWidgetView
+ else -> throw IllegalStateException()
}
- return 0
}
fun getStackWidgetEmptyViewId(type: StackWidgetType?): Int {
- when (type) {
- CHECKMARK -> return R.id.checkmarkStackWidgetEmptyView
- FREQUENCY -> return R.id.frequencyStackWidgetEmptyView
- SCORE -> return R.id.scoreStackWidgetEmptyView
- HISTORY -> return R.id.historyStackWidgetEmptyView
- STREAKS -> return R.id.streakStackWidgetEmptyView
- TARGET -> return R.id.targetStackWidgetEmptyView
+ return when (type) {
+ CHECKMARK -> R.id.checkmarkStackWidgetEmptyView
+ FREQUENCY -> R.id.frequencyStackWidgetEmptyView
+ SCORE -> R.id.scoreStackWidgetEmptyView
+ HISTORY -> R.id.historyStackWidgetEmptyView
+ STREAKS -> R.id.streakStackWidgetEmptyView
+ TARGET -> R.id.targetStackWidgetEmptyView
+ else -> throw IllegalStateException()
}
- return 0
}
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt
index d055c216b..e07c95359 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/StreakWidget.kt
@@ -24,9 +24,10 @@ import android.content.Context
import android.view.View
import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.activities.common.views.StreakChart
import org.isoron.uhabits.core.models.Habit
-import org.isoron.uhabits.utils.toThemedAndroidColor
+import org.isoron.uhabits.core.ui.views.WidgetTheme
import org.isoron.uhabits.widgets.views.GraphWidgetView
class StreakWidget(
@@ -46,7 +47,7 @@ class StreakWidget(
widgetView.setBackgroundAlpha(preferedBackgroundAlpha)
if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f)
(widgetView.dataView as StreakChart).apply {
- setColor(habit.color.toThemedAndroidColor(context))
+ setColor(WidgetTheme().color(habit.color).toInt())
setStreaks(habit.streaks.getBest(maxStreakCount))
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/TargetWidget.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/TargetWidget.kt
index 5116aa78e..f98331e8f 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/TargetWidget.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/TargetWidget.kt
@@ -25,11 +25,12 @@ import android.view.View
import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import kotlinx.coroutines.runBlocking
+import org.isoron.platform.gui.toInt
import org.isoron.uhabits.activities.common.views.TargetChart
import org.isoron.uhabits.activities.habits.show.views.TargetCardView.Companion.intervalToLabel
import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.ui.screens.habits.show.views.TargetCardPresenter
-import org.isoron.uhabits.utils.toThemedAndroidColor
+import org.isoron.uhabits.core.ui.views.WidgetTheme
import org.isoron.uhabits.widgets.views.GraphWidgetView
class TargetWidget(
@@ -49,8 +50,12 @@ class TargetWidget(
widgetView.setBackgroundAlpha(preferedBackgroundAlpha)
if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f)
val chart = (widgetView.dataView as TargetChart)
- val data = TargetCardPresenter.buildState(habit, prefs.firstWeekdayInt)
- chart.setColor(data.color.toThemedAndroidColor(context))
+ val data = TargetCardPresenter.buildState(
+ habit = habit,
+ firstWeekday = prefs.firstWeekdayInt,
+ theme = WidgetTheme(),
+ )
+ chart.setColor(WidgetTheme().color(habit.color).toInt())
chart.setTargets(data.targets)
chart.setLabels(data.intervals.map { intervalToLabel(context.resources, it) })
chart.setValues(data.values)
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt
index bd6d7a50e..d577727e0 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/WidgetUpdater.kt
@@ -95,7 +95,7 @@ class WidgetUpdater
val modifiedWidgetIds = when (modifiedHabitId) {
null -> widgetIds.toList()
else -> widgetIds.filter { w ->
- widgetPrefs.getHabitIdsFromWidgetId(w)!!.contains(modifiedHabitId)
+ widgetPrefs.getHabitIdsFromWidgetId(w).contains(modifiedHabitId)
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/HabitPickerDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/HabitPickerDialog.kt
index 2383b3683..ff743816b 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/HabitPickerDialog.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/activities/HabitPickerDialog.kt
@@ -31,6 +31,7 @@ import android.widget.ListView
import android.widget.TextView
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R
+import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.preferences.WidgetPreferences
import org.isoron.uhabits.widgets.WidgetUpdater
import java.util.ArrayList
@@ -58,6 +59,7 @@ open class HabitPickerDialog : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val component = (applicationContext as HabitsApplication).component
+ AndroidThemeSwitcher(this, component.preferences).apply()
val habitList = component.habitList
widgetPreferences = component.widgetPreferences
widgetUpdater = component.widgetUpdater
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt
index db37cb273..57cff3ddb 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/widgets/views/CheckmarkWidgetView.kt
@@ -39,6 +39,7 @@ import org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor
import org.isoron.uhabits.utils.StyledResources
import kotlin.math.max
import kotlin.math.min
+import kotlin.math.roundToInt
class CheckmarkWidgetView : HabitWidgetView {
var activeColor: Int = 0
@@ -102,7 +103,7 @@ class CheckmarkWidgetView : HabitWidgetView {
SKIP -> resources.getString(R.string.fa_skipped)
UNKNOWN -> {
run {
- if (preferences!!.areQuestionMarksEnabled()) {
+ if (preferences!!.areQuestionMarksEnabled) {
return resources.getString(R.string.fa_question)
} else {
resources.getString(R.string.fa_times)
@@ -118,26 +119,25 @@ class CheckmarkWidgetView : HabitWidgetView {
get() = R.layout.widget_checkmark
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
- val width = MeasureSpec.getSize(widthMeasureSpec)
- val height = MeasureSpec.getSize(heightMeasureSpec)
- var w = width.toFloat()
- var h = width * 1.25f
- val scale = min(width / w, height / h)
- w *= scale
- h *= scale
- val newWidthMeasureSpec = MeasureSpec.makeMeasureSpec(w.toInt(), MeasureSpec.EXACTLY)
- val newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(h.toInt(), MeasureSpec.EXACTLY)
- var textSize = 0.15f * h
- val maxTextSize = getDimension(context, R.dimen.smallerTextSize)
- textSize = min(textSize, maxTextSize)
+ var width = MeasureSpec.getSize(widthMeasureSpec)
+ var height = MeasureSpec.getSize(heightMeasureSpec)
+ if (height >= width) {
+ height = min(height, (width * 1.5).roundToInt())
+ } else {
+ width = min(width, height)
+ }
+ val textSize = min(0.2f * width, getDimension(context, R.dimen.smallerTextSize))
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
if (isNumerical) {
- ring.setTextSize(textSize * 0.75f)
+ ring.setTextSize(textSize * 0.9f)
} else {
ring.setTextSize(textSize)
}
- ring.setThickness(0.15f * textSize)
- super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec)
+ ring.setThickness(0.03f * width)
+ super.onMeasure(
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
+ )
}
private fun init() {
diff --git a/uhabits-android/src/main/play/listings/ca-rES/full-description.txt b/uhabits-android/src/main/play/listings/ca-rES/full-description.txt
index 89144fcb6..9a0df37c9 100644
--- a/uhabits-android/src/main/play/listings/ca-rES/full-description.txt
+++ b/uhabits-android/src/main/play/listings/ca-rES/full-description.txt
@@ -1,4 +1,4 @@
-Loop Seguiment d'hàbits t'ajuda a crear i mantenir en la teva vida hàbits positius de llarg termini. Estadístiques i gràfiques detallades et donen una imatge clara de com els teus hàbits han millorat en el temps. L'app és completament sense anuncis, de codi obert i respecta la teva privadesa.
+Loop Seguiment d'hàbits t'ajuda a crear i mantenir en la teva vida hàbits positius de llarg termini. Gràfics i estadístiques detallades us proporcionen una imatge clara de com els vostres hàbits han millorat amb el pas del temps. L'aplicació Blokada és totalment lliure de publicitat, de codi obert i respecta la vostra privadesa.
Interfície minimalista, lleugera i bonica
Loop té una interfície elegant i minimalista que es molt fàcil d'usar, inclús per als usuaris primerencs. Altament optimitzada per a que sigui ràpida, l'app funciona bé inclús en telèfons antics.
diff --git a/uhabits-android/src/main/play/listings/de-rDE/full-description.txt b/uhabits-android/src/main/play/listings/de-rDE/full-description.txt
index 56eb25d16..d3705a7a8 100644
--- a/uhabits-android/src/main/play/listings/de-rDE/full-description.txt
+++ b/uhabits-android/src/main/play/listings/de-rDE/full-description.txt
@@ -1,4 +1,4 @@
-Loop Habit Tracker hilft dir dabei, positive Gewohnheiten in dein Leben zu integrieren und sie dauerhaft zu verfolgen. Detaillierte Diagramme und Statistiken geben Aufschluss darüber, wie sich die Gewohnheiten über die Zeit verändern und verbessern. Die App ist werbefrei, open source und respektiert die Privatsphäre.
+Loop Habit Tracker hilft dir dabei gute Gewohnheiten zu erlangen und sie ein Leben lang zu pflegen. Detaillierte Diagramme und Statistiken geben Aufschluss darüber, wie sich die Gewohnheiten über die Zeit verändern und verbessern. Die App ist werbefrei, open source und respektiert die Privatsphäre.
Schöne, minimalistisch und übersichtliche Benutzeroberfläche
Loop hat eine elegante und minimalistische Benutzeroberfläche, die selbst für Erstnutzer eine einfache Verwendung möglich macht. Dank vieler Geschwindigkeitsoptimierungen funktioniert die App auch auf älteren Geräten einwandfrei.
diff --git a/uhabits-android/src/main/play/listings/de-rDE/short-description.txt b/uhabits-android/src/main/play/listings/de-rDE/short-description.txt
index de6c251de..229fed76b 100644
--- a/uhabits-android/src/main/play/listings/de-rDE/short-description.txt
+++ b/uhabits-android/src/main/play/listings/de-rDE/short-description.txt
@@ -1 +1 @@
-Erstelle gute Gewohnheiten und verfolge ihren Fortschritt (ohne Werbung)
+Erlange gute Gewohnheiten und verfolge dessen Fortschritte (ohne Werbung)
diff --git a/uhabits-android/src/main/play/listings/es-rES/full-description.txt b/uhabits-android/src/main/play/listings/es-rES/full-description.txt
index b3082599c..66c6cd7ba 100644
--- a/uhabits-android/src/main/play/listings/es-rES/full-description.txt
+++ b/uhabits-android/src/main/play/listings/es-rES/full-description.txt
@@ -1,7 +1,7 @@
-Loop Habit Tracker te ayuda a crear y mantener hábitos positivos y a largo plazo en tu vida. Gráficos detallados y las estadísticas te dan una idea clara de cómo tus hábitos han mejorado con el tiempo. La aplicación es completamente gratis, de código abierto y respeta tu privacidad.
+Loop Habit Tracker te ayuda a crear y mantener hábitos positivos de largo plazo en tu vida. Gráficos detallados y estadísticas te dan una idea clara de cómo tus hábitos han mejorado con el tiempo. La aplicación es completamente gratis, de código abierto y respeta tu privacidad.
-Interfase hermosa, minimalista y liviana
-Loop tiene una interfaz elegante y minimalista que es muy fácil de usar, incluso para usuarios nuevos. Muy optimizada para la velocidad, la aplicación funciona bien incluso en teléfonos más antiguos.
+Interfaz hermosa, minimalista y liviana
+Loop tiene una interfaz elegante y minimalista que es muy fácil de usar, incluso para usuarios nuevos. Altamente optimizada para la velocidad, la aplicación funciona bien incluso en teléfonos más antiguos.
Puntaje de hábitos
Loop tiene una fórmula avanzada para calcular la fuerza de tus hábitos. Cada repetición fortalece tu hábito y cada día perdido lo debilita. Sin embargo, unos días perdidos después de una larga racha no destruirán por completo tu progreso, a diferencia de muchas otras aplicaciones del tipo "no rompas la cadena".
@@ -13,15 +13,15 @@ Además de los hábitos diarios, Loop admite hábitos con horarios más complejo
Programa notificaciones para recordarte tus hábitos. Cada hábito puede tener su propio recordatorio, a la hora elegida del día. Marca o descarta fácilmente tu hábito directamente de la notificación.
Widgets
-Recuerda tus hábitos apenas desbloqueando el teléfono. Los widgets de colores te permiten rastrear tus hábitos directamente desde tu pantalla de inicio, sin siquiera abrir la aplicación.
+Recuerde sus hábitos cada vez que desbloquee su teléfono. Los widgets de colores te permiten rastrear tus hábitos directamente desde tu pantalla de inicio, sin siquiera abrir la aplicación.
Toma el control de tus datos
-Si quieres analizar más tus datos o moverlos a otro servicio, Loop le permite exportarlo a hojas de cálculo, (CSV) o a un archivo de base de datos (SQLite). Para usuarios avanzados, se pueden marcar hábitos a través de otras aplicaciones, como Tasker.
+Si deseas analizar más sus datos o moverlos a otro servicio, Loop te permite exportarlos a hojas de cálculo (CSV) o a un archivo de base de datos (SQLite). Para usuarios avanzados, se pueden marcar hábitos a través de otras aplicaciones, como Tasker.
Sin limitaciones
Rastrea tantos hábitos como desees. Loop no impone límites artificiales sobre cuántos hábitos puedes tener. Todas las características están disponibles para todos los usuarios. No hay compras dentro de la aplicación.
-Completamente sin publicidades y código abierto
+Completamente sin anuncios y código abierto
No hay publicidades, notificaciones molestas o permisos intrusivos en esta aplicación, y nunca los habrá. La aplicación es completamente de código abierto (Licencia GPLv3).
Funciona sin conexión y respeta tu privacidad
diff --git a/uhabits-android/src/main/play/listings/fa-rIR/full-description.txt b/uhabits-android/src/main/play/listings/fa-rIR/full-description.txt
index 8c33749c6..dca14e830 100644
--- a/uhabits-android/src/main/play/listings/fa-rIR/full-description.txt
+++ b/uhabits-android/src/main/play/listings/fa-rIR/full-description.txt
@@ -1,12 +1,12 @@
-Loop Habit Tracker به شما کمک میکند تا عادتهای مثبت طولانیمدت را در زندگی ایجاد و حفظ کنید. نمودارها و آمارهای دقیق، تصویری واضح از چگونگی بهبود عادتهای شما در طول زمان به شما میدهد. این برنامه کاملاً بدون تبلیغات و منبعباز است و به حریم خصوصی شما احترام میگذارد.
+عادتسنج لوپ به شما کمک میکند تا عادتهای مثبت طولانیمدت را در زندگی ایجاد و حفظ کنید. نمودارها و آمارهای دقیق، تصویری واضح از چگونگی بهبود عادتهای شما در طول زمان به شما میدهد. این برنامه کاملاً بدون تبلیغات و منبعباز است و به حریم خصوصی شما احترام میگذارد.
رابط کاربری زیبا، مینیمال و سبک
Loop دارای یک رابط زیبا و مینیمال است که استفاده از آن حتی برای کاربرانی که برای بار اول استفاده میکنند بسیار آسان است. این برنامه از نظر سرعت عملکرد بسیار بهینه شده و حتی در تلفنهای قدیمی نیز به خوبی کار میکند.
نمره عادت
-Loop فرمول پیشرفتهای برای محاسبه قدرت عادتهای شما دارد. هر تکرار عادت شما را قویتر میکند و هر روز فراموششده آن را ضعیف میکند. چند روز از دست رفته پس از یک رشته طولانی ، برخلاف بسیاری از برنامه های شکننده نشده ، پیشرفت شما را به طور کامل از بین نمی برد.
+لوپ فرمول پیشرفتهای برای محاسبه قدرت عادتهای شما دارد. هر تکرار عادت شما را قویتر میکند و هر روز فراموششده آن را ضعیف میکند. ولی برخلاف دیگر برنامههای عادتسنج، اگر بعد از یک روند طولانی حفظ عادت، چند روز آن عادت را انجام ندهید، پیشرفت شما به صورت کامل نابود نخواهد شد.
-برنامهریزی با دست باز
+برنامهریزی منعطف
علاوه بر علاوه بر عادتهایی که هر روز باید تکرار شوند، شما میتوانید برنامهریزیهای متنوعی دیگری را تنظیم کنید، مثلا هفته ای سه بار یا روز در میان
یاداوری
@@ -19,11 +19,11 @@ Loop فرمول پیشرفتهای برای محاسبه قدرت عادت
اگر می خواهید داده های خود را بیشتر تجزیه و تحلیل کنید ، یا آنها را به سرویس دیگری منتقل کنید ، Loop به شما امکان می دهد آنها را به صفحه گسترده (CSV) یا یک پرونده پایگاه داده (SQLite) صادر کنید. برای کاربران قدرت ، علامت های تأیید را می توان از طریق برنامه های دیگر مانند Tasker اضافه کرد.
بدون محدودیت
-هر تعداد که می خواهید عادت ها را دنبال کنید. حلقه محدودیتی مصنوعی در تعداد عادت های شما ایجاد نمی کند. همه ویژگی ها در دسترس همه کاربران است. هیچ خرید درون برنامه ای وجود ندارد.
+هر تعداد که می خواهید عادت ها را دنبال کنید. حلقه محدودیتی مصنوعی در تعداد عادت های شما ایجاد نمی کند. همه ویژگیها برای همه کاربران در دسترس هستند. هیچ خرید درونبرنامهای وجود ندارد.
-کاملاً بدون آگهی و منبع آزاد
-هیچ تبلیغی ، اعلان آزار دهنده یا مجوز سرزده در این برنامه وجود ندارد و هرگز وجود نخواهد داشت. برنامه کاملاً منبع باز (GPLv3) است.
+کاملاً بدون آگهی و منبع باز
+هیچ تبلیغ، اعلان آزاردهنده یا مجوز بیاجازه در این برنامه وجود ندارد و هرگز وجود نخواهد داشت. برنامه کاملاً منبع باز (GPLv3) است.
-بصورت آفلاین کار می کند و به حریم خصوصی شما احترام می گذارد
-حلقه به اتصال اینترنت یا ثبت نام آنلاین حساب نیاز ندارد. اطلاعات محرمانه شما هرگز برای کسی ارسال نمی شود. نه توسعه دهندگان و نه اشخاص ثالث به آن دسترسی ندارند.
+به صورت آفلاین کار میکند و به حریم خصوصی شما احترام می گذارد
+لوپ به اینترنت یا ثبتنام آنلاین نیاز ندارد. اطلاعات محرمانه شما هرگز به جایی ارسال نمیشود. نه توسعهدهندگان و نه اشخاص ثالث به آن دسترسی ندارند.
diff --git a/uhabits-android/src/main/play/listings/fa-rIR/short-description.txt b/uhabits-android/src/main/play/listings/fa-rIR/short-description.txt
index 68ff33039..1d05d4daa 100644
--- a/uhabits-android/src/main/play/listings/fa-rIR/short-description.txt
+++ b/uhabits-android/src/main/play/listings/fa-rIR/short-description.txt
@@ -1 +1 @@
-ایجاد عادت های خوب و پیگیری پیشرفت آنها در طول زمان (بدون تبلیغ)
+عادتهای خوب ایجاد کنید و پیشرفت آنها را در طول زمان پیگیری کنید (بدون تبلیغ)
diff --git a/uhabits-android/src/main/play/listings/iw-rIL/full-description.txt b/uhabits-android/src/main/play/listings/iw-rIL/full-description.txt
index b563fd02e..fde825d17 100644
--- a/uhabits-android/src/main/play/listings/iw-rIL/full-description.txt
+++ b/uhabits-android/src/main/play/listings/iw-rIL/full-description.txt
@@ -1,29 +1,29 @@
-אפליקצית Loop Habit Tracker עוזרת לך ליצור ולשמר הרגלים חיוביים וארוכי טווח בחייך. תרשימים וסטטיסטיקה מפורטים נותנים לך תמונה ברורה כיצד ההרגלים שלך השתפרו לאורך זמן. האפליקציה הינה נטולת פרסומות לחלוטין, כתובה בקוד פתוח וכן מכבדת את הפרטיות שלך.
+„Loop למעקב אחר ההרגלים” מסייע לך ביצירה ובשימור הרגלים טובים וארוכי טווח. תרשימים וסטטיסטיקה מפורטים נותנים לך תמונה ברורה כיצד ההרגלים שלך השתפרו לאורך זמן. היישום נטול פרסומות לחלוטין, קוד המקור שלו פתוח והוא מכבד את הפרטיות שלך.
-ממשק יפה, מינימלי וקליל
-ל־Loop ממשק מינימלי וקל לשימוש, כבר בשימוש הראשון. האפליקציה מותאמת מאוד לפעולה מהירה, ופועלת היטב גם בטלפונים ישנים.
+ממשק יפה, חסכוני וקליל
+ל־Loop ממשק אלגנטי, חסכוני וקל לשימוש אפילו בפעם הראשונה. היישום מותאם במיוחד למהירות, ועובד היטב גם בטלפונים ישנים.
ציון הרגל
-ל־Loop יש נוסחה מתקדמת לחישוב חוזק ההרגלים שלך. כל חזרה הופכת את ההרגל שלכם לחזק יותר, וכל יום שהוחמץ הופך אותו לחלש יותר. כמה ימים שהוחמצו לאחר רצף ארוך, לעומת זאת, לא יהרסו לחלוטין את ההתקדמות, בניגוד להרבה אפליקציות אחרות מסוג "אל תשברו את השרשרת".
+ל־Loop יש נוסחה מתקדמת לחישוב חוזק ההרגלים שלך. כל חזרה על ההרגל מחזקת אותו, וכל יום שהוחמץ מחליש אותו. כמה ימים שהוחמצו לאחר רצף ארוך, לעומת זאת, לא יהרסו לחלוטין את ההתקדמות, בניגוד ליישומים רבים אחרים מסוג „לא לשבור את השרשרת”.
לוחות זמנים גמישים
-בנוסף להרגלים יומיומיים, Loop תומכת בהרגלים עם לוחות זמנים מורכבים יותר, כמו 3 פעמים בשבוע או "יום כן יום לא".
+בנוסף להרגלים יומיומיים, Loop תומך בהרגלים עם לוחות זמנים מורכבים יותר, כמו 3 פעמים בשבוע או „יום כן יום לא”.
תזכורות
אפשר לתזמן התראות קבועות עם תזכורות לגבי ההרגלים שלך. לכל הרגל יכולה להיות תזכורת משלו, בשעה שנבחרה ביום. אפשר לסמן או לדחות את עשיית ההרגל ישירות מההתראה בקלות.
-ווידג'טים
-היזכרו בהרגלים בכל שחרור נעילת הטלפון. ווידג'טים צבעוניים מאפשרים לך לעקוב אחר הרגליך ישירות ממסך הבית שלך, מבלי לפתוח את האפליקציה אפילו.
+יישומונים
+להיזכר בהרגלים בכל שחרור נעילת הטלפון. יישומונים צבעוניים שמאפשרים לך לעקוב אחר ההרגלים ישירות ממסך הבית, מבלי לפתוח אפילו את היישום.
השליטה בנתונים היא בידיים שלך
-אם ברצונך לנתח עוד יותר את הנתונים שלך, או להעביר אותם לשירות אחר, Loop מאפשרת לך לייצא אותם לגיליונות אלקטרוניים (CSV) או לקובץ מסד נתונים (SQLite). עבור משתמשים מובילים, ישנה יכולת להוסיף ביקורת באמצעות אפליקציות אחרות, כגון Tasker.
+אם ברצונך לנתח יותר לעומק את הנתונים שלך, או להעבירם לשירות אחר, Loop מאפשרת לך לייצא אותם לגיליונות אלקטרוניים (CSV) או לקובץ מסד נתונים (SQLite). למשתמשים מתקדמים, אפשר לסמן הרגלים דרך יישומים אחרים, כגון Tasker.
בלי הגבלות
-עקבו אחר כמה הרגלים שתרצו. Loop לא מגבילה את כמות ההרגלים שאפשר להוסיף. כל התכונות זמינות לכל המשתמשים. אין רכישות מתוך האפליקציה.
+אפשר לעקוב אחר כמה הרגלים שרוצים. Loop לא מגבילה את כמות ההרגלים שאפשר להוסיף. כל התכונות זמינות לכל המשתמשים. אין רכישות מתוך היישום.
-נטול פרסומות במלואו ובקוד פתוח
-אין שום פרסומות, התראות מעצבנות או הרשאות פולשניות ביישום הזה, ולעולם לא יהיו. הקוד של היישום הזה פתוח במלואו (GPLv3).
+היישום נטול פרסומות במלואו וקוד המקור שלו פתוח
+אין שום פרסומות, התראות מעצבנות או הרשאות פולשניות ביישום הזה, ולעולם לא יהיו. קוד היישום הזה פתוח לחלוטין (GPLv3).
עובד במצב לא מקוון ומכבד את פרטיותך
-ל־Loop לא נחוצים חיבור לאינטרנט או הרשמה לחשבון מקוון. הנתונים הסודיים שלך לא נשלחים לאחרים בכלל. גם למפתחים וגם לגורמי צד שלישי כלשהם אין גישה אליהם.
+ל־Loop לא נחוצים חיבור לאינטרנט או הרשמה לחשבון מקוון. הנתונים הסודיים שלך לא נשלחים לאחרים כלל. גם למפתחים וגם לגורמי צד שלישי כלשהם אין גישה אליהם.
diff --git a/uhabits-android/src/main/play/listings/iw-rIL/short-description.txt b/uhabits-android/src/main/play/listings/iw-rIL/short-description.txt
index b5ff053b4..9f070d38f 100644
--- a/uhabits-android/src/main/play/listings/iw-rIL/short-description.txt
+++ b/uhabits-android/src/main/play/listings/iw-rIL/short-description.txt
@@ -1 +1 @@
-התחלת הרגלים טובים ומעקב אחר ההתקדמות בעשייתם למשך זמן (ללא פרסומות)
+התחלת הרגלים טובים ומעקב אחר ההתקדמות בעשייתם לאורך זמן (ללא פרסומות)
diff --git a/uhabits-android/src/main/play/listings/nl-rNL/full-description.txt b/uhabits-android/src/main/play/listings/nl-rNL/full-description.txt
index 98be2e26c..98fe9eee0 100644
--- a/uhabits-android/src/main/play/listings/nl-rNL/full-description.txt
+++ b/uhabits-android/src/main/play/listings/nl-rNL/full-description.txt
@@ -15,7 +15,7 @@ Plan notificaties om jezelf te herinneren aan je gewoontes. Elke gewoonte kan zi
Widgets
Wordt bij elke telefoonontgrendeling herinnerd aan je gewoontes. Kleurrijke widgets maken het mogelijk je gewoontes direct vanuit het startscherm te tracken, zonder de app te openen.
-Neem controle over uw gegevens
+Neem controle over je gegevens
Als je jouw gegevens verder wilt analyseren, of wil verplaatsen in een andere service, dan geeft Loop je de mogelijkheid het te exporteren naar spreadsheets (CSV) of naar een databasebestand (SQlite). Voor hoofdgebruikers kunnen vinkjes worden toegevoegd via andere apps, zoals Tasker.
Geen beperkingen
diff --git a/uhabits-android/src/main/play/listings/ru-rRU/full-description.txt b/uhabits-android/src/main/play/listings/ru-rRU/full-description.txt
index c5ee5b657..413cca2f2 100644
--- a/uhabits-android/src/main/play/listings/ru-rRU/full-description.txt
+++ b/uhabits-android/src/main/play/listings/ru-rRU/full-description.txt
@@ -1,9 +1,9 @@
Трекер привычек Loop помогает вам создавать и поддерживать долгосрочные позитивные привычки в своей жизни. Подробные графики и статистика дадут вам чёткое представление о том, как ваши привычки улучшились с течением времени. Приложение полностью без рекламы, с открытым исходным кодом и с уважением к вашей конфиденциальности.
Красивый, минималистичный и лёгкий интерфейс
-У Loop изящный и минималистичный интерфейс, который очень прост в использовании даже для начинающих пользователей. Высокооптимизированное для скорости, приложение хорошо работает даже на старых телефонах.
+У Loop изящный и минималистичный интерфейс, который очень прост в использовании даже для начинающих пользователей. Оптимизированное по скорости приложение хорошо работает даже на старых телефонах.
-Показатель привычек
+Показатель устойчивости привычки
У Loop есть продвинутая формула для расчёта силы ваших привычек. Каждое повторение делает вашу привычку сильнее, а каждый пропущенный день - слабее. Однако несколько пропущенных дней после долгой полосы не погубят ваш прогресс в отличие от многих других приложений типа "не разрывай цепь".
Гибкий график
diff --git a/uhabits-android/src/main/play/listings/zh-rCN/full-description.txt b/uhabits-android/src/main/play/listings/zh-rCN/full-description.txt
index 19e5087dc..91a211f5b 100644
--- a/uhabits-android/src/main/play/listings/zh-rCN/full-description.txt
+++ b/uhabits-android/src/main/play/listings/zh-rCN/full-description.txt
@@ -1,4 +1,4 @@
-Loop 习惯记录(以下简称“Loop”)可以帮助您建立好习惯且随着时间记录你的进步。 详细的图表和统计数据,可以使您更清楚地看到自己的进步。 该应用是完全无广告的开源软件,并且它尊重您的隐私。
+Loop 习惯记录(以下简称“Loop”)能帮你养成和长期保持好习惯。 详细的图表和统计数据能让您更清楚地看到自己的进步。 这是一个完全无广告的开源应用,它尊重您的隐私。
优雅、简约、轻巧
Loop 具有优雅而简约的界面,即使对于初次使用的用户,也非常易于使用。 该应用针对速度进行了高度优化,即使在较旧的手机上也可以正常运行。
@@ -12,7 +12,7 @@ Loop 有高级的公式来计算您习惯的强度。 多多重复会使你的
提醒
设定通知以提醒您完成习惯。 每一种习惯都有属于自己的通知,您可以选定当天的某个时间提醒该习惯。 同时从通知中轻松地检查或取消您的习惯。
-小部件
+微件
当您解锁手机时, 多彩的小部件可让您直接从主屏幕记录自己的习惯,而无需打开应用程序。
掌控您的数据
@@ -22,7 +22,7 @@ Loop 有高级的公式来计算您习惯的强度。 多多重复会使你的
想记录多少习惯都没问题! Loop 对您的习惯没有任何限制, 所有用户均可使用所有功能, 并且没有应用内购买。
完全无广告的开源软件
-此应用程序中永远没有任何广告,烦人的通知或侵入性权限, 应用程序是完全开源的,完整的代码在GPLv3。
+本应用永远都不会有广告和烦人的通知,也不会索取侵入性权限。 本应用是完全开源的(GPLv3)。
脱机工作并尊重您的隐私
Loop 不需要网络连接或在线帐户注册。 您的用户数据永远不会发送给任何人, 包括开发人员和任何第三方都无法访问它。
diff --git a/uhabits-android/src/main/play/listings/zh-rCN/short-description.txt b/uhabits-android/src/main/play/listings/zh-rCN/short-description.txt
index 70ff5eff1..3d57b8eda 100644
--- a/uhabits-android/src/main/play/listings/zh-rCN/short-description.txt
+++ b/uhabits-android/src/main/play/listings/zh-rCN/short-description.txt
@@ -1 +1 @@
-建立好习惯且随着时间记录你的进步(无广告)
+养成好习惯并随时记录你的进步(无广告)
diff --git a/uhabits-android/src/main/play/release-notes/en-US/default.txt b/uhabits-android/src/main/play/release-notes/en-US/default.txt
index 6aaae23bc..279010497 100644
--- a/uhabits-android/src/main/play/release-notes/en-US/default.txt
+++ b/uhabits-android/src/main/play/release-notes/en-US/default.txt
@@ -1,3 +1,5 @@
+2.0.3:
+* Bug fixes
2.0:
* Track numeric habits (e.g. how many pages did you read?)
* Skip days without breaking your streak
diff --git a/uhabits-android/src/main/res/layout/about_translators.xml b/uhabits-android/src/main/res/layout/about_translators.xml
index e5d45574f..90c726ee2 100644
--- a/uhabits-android/src/main/res/layout/about_translators.xml
+++ b/uhabits-android/src/main/res/layout/about_translators.xml
@@ -30,9 +30,11 @@
+
+
@@ -48,11 +50,14 @@
+
+
+
@@ -63,6 +68,7 @@
+
@@ -91,6 +97,7 @@
+
@@ -104,6 +111,7 @@
+
@@ -124,6 +132,7 @@
+
@@ -136,6 +145,7 @@
+
@@ -147,6 +157,7 @@
+
@@ -171,6 +182,7 @@
+
diff --git a/uhabits-android/src/main/res/layout/activity_edit_habit.xml b/uhabits-android/src/main/res/layout/activity_edit_habit.xml
index 94af404e7..b3a33c373 100644
--- a/uhabits-android/src/main/res/layout/activity_edit_habit.xml
+++ b/uhabits-android/src/main/res/layout/activity_edit_habit.xml
@@ -185,7 +185,7 @@
style="@style/FormInput"
android:id="@+id/targetInput"
android:maxLines="1"
- android:inputType="number"
+ android:inputType="numberDecimal"
android:hint="@string/example_target"/>
@@ -248,4 +248,4 @@
-
\ No newline at end of file
+
diff --git a/uhabits-android/src/main/res/layout/widget_checkmark.xml b/uhabits-android/src/main/res/layout/widget_checkmark.xml
index 75b351317..abdbf4dea 100644
--- a/uhabits-android/src/main/res/layout/widget_checkmark.xml
+++ b/uhabits-android/src/main/res/layout/widget_checkmark.xml
@@ -31,19 +31,19 @@
android:id="@+id/scoreRing"
android:layout_width="match_parent"
android:layout_height="0dp"
- android:layout_weight="1"
+ android:layout_weight="0.9"
habit:thickness="2"
habit:textSize="16"
habit:enableFontAwesome="true"
android:layout_marginTop="8dp"
- android:layout_marginLeft="12dp"
- android:layout_marginRight="12dp"/>
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"/>
.
-->
-
-
-
+
Loop - Gewoonte Boekhouer
Gewoontes
Instellings
@@ -30,12 +28,7 @@
Voeg gewoonte by
Verander kleur
Gewoonte geskep
- Gewoontes verwyder
- Gewoonte verander
- Gewoontes geargiveer
- Gewoontes gedeargiveer
Oorsig
-
Welkom
15 minute
30 minute
@@ -45,6 +38,4 @@
8 ure
24 ure
Instellings
-
-
diff --git a/uhabits-android/src/main/res/values-ar-rSA/strings.xml b/uhabits-android/src/main/res/values-ar-rSA/strings.xml
index c42d558d7..4542684b6 100644
--- a/uhabits-android/src/main/res/values-ar-rSA/strings.xml
+++ b/uhabits-android/src/main/res/values-ar-rSA/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Habit Tracker
عادات
إعدادات
@@ -28,19 +28,15 @@
إضافة عادة
تغيير اللون
تم إنشاء عادة
- تم حذف العادات
- تم تغيير عادة
- تم أرشفه العادات
- تم الغاء ارشفه العادات
نظرة عامة
قوة العادة
السجل
إزالة
- أيام
تذكير
حفظ
الإنجازات
لا يوجد لديك عادات مفعله
+ لقد أنهيت ألعمل لليوم
إلمس و إستمر لتحقق أو ازل.
إيقاف
انشاء العادة
@@ -64,20 +60,16 @@
مخصص...
تبديل وضعية العادة بضغطة قصيرة
وضع علامات الاختيار الموجودة بنقرة واحدة بدلاً من الصحافة وعقد. أكثر ملاءمة، ولكن قد يتسبب في تبديل عرضي.
- فترتي الغفوى على التذكير
تقييم هذا التطبيق على جوجل بلاي
أرسل الملاحظات إلى المطور
إفحص التعليمات البرمجية على GitHub
روابط
اسم
إعدادات
- فترتي الغفوه
حدد تأخير الغفوة
هل كنت تعلم؟
لإعادة ترتيب القوائم، أضغط اسم من هذه العادة، ثم اسحبه إلى المكان الصحيح.
يمكنك ان ترى المزيد أيام عن طريق وضع الهاتف في وضع أفقي.
- حذف عادات
- سيتم حذف عادات بشكل دائم. هذا العمل لا يمكن التراجع عنه.
العادة حذفت/لم يتم العثور عليها
عطلة نهاية الأسبوع
أيام الأسبوع.
@@ -111,7 +103,7 @@
توليد تقرير الاعطال.
استكشاف الأخطاء وإصلاحها.
المساعدة في ترجمة هذا البرنامج.
- الوضع الليلي.
+ الوضع الليلي.
استخدام أسود نقي في الوضع الليلي.
يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED. .
السطح البيني.
@@ -147,6 +139,7 @@
حسب الإسم
حسب اللون
حسب النقاط
+ حسب الحالة
استخراج
اضغط مع الاستمرار لتغيرالقيمه
تغيير القيمة
@@ -170,16 +163,29 @@
(اختياري)
مثلا: هل استيقظت باكرا اليوم؟ هل مارست الرياضة؟ هل لعبت الشطرنج؟
قابل للقياس
- مثلا: كم كيلومتراً قطعته اليوم؟ كم صفحة قرأتها؟ كم عدد السعرات الحرارية التي أكلتها؟
+ مثال، كم ميلاً قطعته اليوم؟ كم عدد الصفحات التي قرأتها؟
%d مرة في الأسبوع
%d مرة في الشهر
مثال: التمرين
اللون
مثال: 15
مثلا: الجري
- مثلا: كم كيلومترًا جريته اليوم؟
- مثلا: كيلومترات
+ مثلا: كم كيلومترًا جريته اليوم؟
+ مثلا: كيلومترات
كل شهر
لا يمكن أن يكون الإسم فارغًا
اليوم
+ ادخل
+ لا توجد عادات
+ لا توجد عادات قابلة للقياس
+ لا توجد عادات تجاوب بنعم أو لا
+ زيادة
+ إنقاص
+ تمكين أيام التخطي
+ بدّل مرتين لإضافة تخطي بدلاً من علامة اختيار. التخطيات تحافظ على درجاتك دون تغيير أو خسارة سلسلة الانتصارات.
+ إظهار علامات الاستفهام للبيانات المفقودة
+ أنت الآن مطوَِر برمجيات!
+ لم يتم العثور على تطبيق لإتمام هذا الإجراء
+ تمديد اليوم بضع ساعات بعد منتصف الليل
+ انتظر حتى 3:00 صباحاً لعرض يوم جديد. مفيد إذا كنت عادة تذهب إلى السكون بعد منتصف الليل. يتطلب إعادة تشغيل التطبيق.
diff --git a/uhabits-android/src/main/res/values-bg-rBG/strings.xml b/uhabits-android/src/main/res/values-bg-rBG/strings.xml
index c3019dc28..50010bb83 100644
--- a/uhabits-android/src/main/res/values-bg-rBG/strings.xml
+++ b/uhabits-android/src/main/res/values-bg-rBG/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Следене на навици
Навици
Настройки
@@ -30,16 +28,10 @@
Добавяне на навик
Промяна на цвят
Навикът е създаден
- Навиците са изтрити
- Навикът е променен
- Навиците са архивирани
- Навиците са разархивирани
Обзор
Сила на навика
История
Изчистване
- пъти в период от
- дни
Напомняне
Запазване
Поредици
@@ -50,7 +42,6 @@
Редактиране на навик
Поставяне на отметка
По-късно
-
Добре дошли
Loop Следене на навици ви помага да създавате и поддържате добри навици.
Създайте нови навици
@@ -75,8 +66,6 @@
Знаете ли че?
За да пренаредите записите, натиснете и задръжте върху името на навика и го придърпайте до правилното място.
Може да виждате повече дни като обърнете телефона си в хоризонтално положение.
- Изтриване на навици
- Навиците ще се изтрият перманентно. Това действие не може да бъде отменено.
Навикът е изтрит / не е намерен
Събота и неделя
От понеделник до петък
@@ -110,7 +99,7 @@
Генериране на доклад за грешки
Отстраняване на проблеми
Помагане за превода на това приложение
- Нощен режим
+ Нощен режим
Използване на чисто черно при нощен режим
Заменя сивите фонове с чисто черни при нощен режим. Намаля разхода на батерията при телефони с AMOLED дисплеи.
Интерфейс
@@ -122,8 +111,6 @@
Тримесечие
Година
Общо
-
-
На всеки %d дни
На всеки %d седмици
Сила
diff --git a/uhabits-android/src/main/res/values-ca-rES/strings.xml b/uhabits-android/src/main/res/values-ca-rES/strings.xml
index b91390b53..cd5714e1a 100644
--- a/uhabits-android/src/main/res/values-ca-rES/strings.xml
+++ b/uhabits-android/src/main/res/values-ca-rES/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop - Hàbit Rastrejador
Hàbits
Configuració
@@ -28,19 +28,23 @@
Afegir hàbit
Canviar color
Hàbit creat.
- Hàbits esborrats.
- Hàbit modificat.
- Hàbits arxivats.
- Hàbits trets de l\'arxiu.
+
+ - Hàbit modificat.
+ - Hàbit modificat.
+
+
+ - Hàbit no arxivat
+ - Hàbit no arxivat
+
Visió general
Fortalesa de l\'hàbit
Història
Netejar
- dies
Recordatori
Desar
Ratxa
No tens hàbits actius
+ Ja heu acabat per avui!
Prem i manté per a marcar o desmarcar
Desactivat
Crear hàbit
@@ -64,20 +68,20 @@
Personalitza...
Activar/desactivar repeticions prement curt
Posar les marques de verificació amb un sol toc enlloc de prémer i mantenir. Més adequat, però pot causar activacions accidentals.
- Interval d\'endarreriment en recordatoris
Valora aquesta app a Google Play
Enviar resposta al desenvolupador
Veure codi font a Github
Enllaços
Nom
Ajustaments
- Interval d\'endarreriment
Selecciona el retard de l\'endarreriment
Ho sabies?
Per a ordenar les entrades, prem i mantè sobre el nom de l\'hàbit, després arrossega\'l al lloc correcte.
Pots veure més dies posant el teu telèfon en orientació apaisada.
- Esborrar hàbits
- Els hàbits seran esborrats permanentment. Aquesta acció no es pot desfer.
+
+ - Esborrar hàbit
+ - Esborrar hàbit
+
Hàbit suprimit / no trobat
Caps de setmana
Dilluns a divendres
@@ -111,7 +115,7 @@
Generar informe d\'error
Resolució de problemes
Ajuda a traduïr aquesta app
- Mode nocturn
+ Mode nocturn
Utilitzar negre pur en el mode nocturn
Reemplaça fons grisos per negre pur en el mode nocturn. Redueix consum de bateria en telèfons amb pantalla AMOLED.
Interfície
@@ -147,6 +151,7 @@
Per nom
Pel color
Per marcador
+ Per estat
Exportar
Prémer i mantenir per a canviar el valor
Canviar el valor
@@ -170,15 +175,14 @@
Opcional
Per exemple, us heu despertat aviat? Heu fet exercici? Heu jugat a escacs?
Mesurable
- Per exemple, quants quilòmetres heu recorregut avui? Quantes pàgines heu llegit? Quantes calories heu menjat?
%d vegades per setmana
%d vegades al mes
Ex. Exercici
Color
ex. 15
Per exemple: córrer
- Per exemple, quants quilòmetres heu recorregut avui?
- per exemple, quilòmetres
+ Per exemple, quants quilòmetres heu recorregut avui?
+ per exemple, quilòmetres
Cada mes
No es pot deixar en blanc
Avui
diff --git a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml
index d30d49a3f..0e02cfcfa 100644
--- a/uhabits-android/src/main/res/values-cs-rCZ/strings.xml
+++ b/uhabits-android/src/main/res/values-cs-rCZ/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Habit Tracker
Zvyky
Nastavení
@@ -28,15 +28,10 @@
Přidat zvyk
Změnit barvu
Zvyk vytvořen.
- Zvyky smazány.
- Zvyk změněn.
- Archivováno.
- Zvyky obnoveny.
Přehled
Síla zvyku
Historie
Smazat
- dní
Připomenutí
Uložit
Série
@@ -64,20 +59,16 @@
Vlastní...
Označte opakování krátkým stisknutím
Praktičtější, ale může způsobit nechtěné označení.
- Doba odložení upomínky
Ohodnoťte nás v Google Play
Zpětná vazba vývojáři
Zobrazit zdroj. kód na GitHub
Odkazy
Jméno
Nastavení
- Interval odkladu
Nastavit délku odložení
Věděli jste?
Přeřazení záznamů proveď stisknutím a podržením názvu zvyku a poté přesunutím na správné místo.
Můžeš vidět více dnů otočením telefonu na šířku.
- Smazat zvyky
- Označené zvyky budou navždy odstraněny. Toto nelze vzít zpět.
Zvyk smazán / nenalezen
Víkendy
Pondělí až pátek
@@ -111,7 +102,7 @@
Generovat výpis chyb
Řešení problémů
Pomozte s překladem aplikace
- Noční téma
+ Noční téma
Zobrazit čistě černou v nočním tématu
Nahradí šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem.
Rozhraní
@@ -170,16 +161,16 @@
(nepovinné)
např. Vzbudil ses dnes brzy? Cvičil jsi dnes? Hrál jsi šachy?
Měřitelný
- např. Kolik kilometrů jsi dnes uběhl? Kolik stránek jsi přečetl? Kolik kalorií jsi snědl?
%d krát týdně
%d krát za měsíc
např. Cvičení
Barva
např. 15
např. Běh
- Např. kolik mil jste dnes uběhl?
- např. míle
+ Např. kolik mil jste dnes uběhl?
+ např. míle
Každý měsíc
Musíte vyplnit
Dnes
+ Nyní jste vývojář
diff --git a/uhabits-android/src/main/res/values-da-rDK/strings.xml b/uhabits-android/src/main/res/values-da-rDK/strings.xml
index c59eae038..779054665 100644
--- a/uhabits-android/src/main/res/values-da-rDK/strings.xml
+++ b/uhabits-android/src/main/res/values-da-rDK/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Vane Tracker
Vaner
Indstillinger
@@ -30,27 +28,37 @@
Tilføj vane
Skift farve
Vanen er skabt.
- Vaner slettet
- Vanen er ændret
- Vanerne er arkiveret
- Vanerne er fjernet fra arkivet
+
+ - Vanen er ændret
+ - Vanerne er ændret
+
+
+ - Vanen er slettet
+ - Vanerne er slettet
+
+
+ - Vanen er arkiveret
+ - Vanerne er arkiveret
+
+
+ - Vane taget ud fra arkiv
+ - Vaner taget ud fra arkiv
+
Overblik
Vanestyrke
Historie
Ryd
- gange på
- dage
Påmindelse
Gem
Streaks
Du har ingen aktive vaner
+ Du har klaret alt for i dag!
Tryk og hold nede for at afkrydse
Fra
Opret vane
Rediger vane
Afkryds
Senere
-
Velkommen
Loop Habit Tracker hjælper dig med at holde gode vaner.
Skab nogle nye vaner
@@ -64,6 +72,8 @@
4 timer
8 timer
24 timer
+ Spørg altid
+ Brugerdefineret...
Tjek vaner med kort tryk
Sæt tjekmærker med et enkelt tryk i stedet for tryk-og-hold. Mere bekvemmeligt, men kan forårsage uhensigtede tryk.
Bedøm denne app på Google Play
@@ -72,11 +82,18 @@
Henvisninger
Navn
Indstillinger
+ Vælg snooze-forsinkelse
Vidste du?
For at omarrangere poster, tryk og hold på navnet på den vane, og træk den til det korrekte sted.
Du kan se flere dage ved at sætte telefonen i liggende tilstand.
- Slet vaner
- Vanerne vil blive slettet permanent. Denne handling kan ikke fortrydes.
+
+ - Slet vane?
+ - Slet vaner?
+
+
+ - Vanen vil blive slettet permanent. Denne handling kan ikke fortrydes.
+ - Vanerne vil blive slettet permanent. Denne handling kan ikke fortrydes.
+
Vane slettet / ikke fundet
Weekender
Mandag til Fredag
@@ -87,13 +104,22 @@
Fjern
Vælg timer
Vælg minutter
+
+ - hints
+ - hints
+
Om
Oversættere
Udviklere
Version %s
Hyppighed
Afkrydsning
- Bedste striber
+ Afkryds stakkontrol
+ Frekvens stakkontrol
+ Score stakkontrol
+ Historik stakkontrol
+ Uafbrudt række stakkontrol
+ Bedste streak
Hver dag
Hver uge
Hjælp & FAQ
@@ -110,7 +136,7 @@
Generer fejlrapport
Fejlfinding
Hjælpe med at oversætte denne app
- Nat-tilstand
+ Nat-tilstand
Brug ren sort i nat-tilstand
Erstatter grå baggrunde med ren sort i nat-tilstand. Reducerer batteriforbruget i telefoner med AMOLED skærm.
Grænseflade
@@ -122,8 +148,7 @@
Kvartal
År
I alt
-
-
+ Ja eller nej
Hver %d dage
Hver %d uger
Point
@@ -134,6 +159,8 @@
Skjul arkiverede
Fastgør notifikationer
Forhindrer notifikationer i at blive swipet væk.
+ Notifikationslys
+ Viser et blinkende lys til påmindelser. Kun tilgængelig i telefoner med LED-notifikationslyskilder.
Reparer database
Database repareret.
Fjern afkrydsning
@@ -145,5 +172,54 @@
Efter navn
Efter farve
Efter score
+ Efter status
Eksporter
+ Tryk-og-hold for at ændre værdien
+ Skift værdi
+ Kalender
+ Enhed
+ f.eks. Har du trænet i dag?
+ Spørgsmål
+ Mål
+ Ja
+ Nej
+ Skift lyd-, vibrations-, lys- og andre notifikationsindstillinger
+ Tilpas notifikationer
+ Se privatlivspolitik
+ Se alle bidragsydere…
+ Database
+ Gennemsigtighed af widget
+ Gør widgets mere gennemsigtige eller mere uigennemsigtige på din startskærm.
+ Første dag i ugen
+ Har du fuldført denne vane i dag?
+ Noter
+ (Valgfrit)
+ F.eks. vågnede du tidligt i dag? Har du motioneret? Spillede du skak?
+ Målbar
+ f.eks Hvor mange kilometer kørte du i dag? Hvor mange sider læste du?
+ %d gange om ugen
+ %d gange om måneden
+ f.eks. Motion
+ Farve
+ f.eks. 15
+ f.eks. Løb
+ F.eks. Hvor mange kilometer har du løbet i dag?
+ f.eks. kilometer
+ Hver måned
+ skal udfyldes
+ I dag
+ Angiv
+ Ingen vaner fundet
+ Ingen målbare vaner fundet
+ Ingen ja-eller-nej vaner fundet
+ Forøgelse
+ Formindskelse
+ Slå overspring af dage til
+ Skift to gange for at tilføje et overspring i stedet for et flueben. Spring over holder din score uændret og bryder ikke din række.
+ Vis spørgsmålstegn for manglende data
+ Differentiér dage uden data fra faktiske udeladelser. For at indtaste en udeladelse, skiftes to gange.
+ Du er nu udvikler
+ Ingen app fundet til at understøtte denne handling
+ Forlæng dagen et par timer efter midnat
+ Vent til 3:00 for at vise en ny dag. Nyttigt, hvis du typisk går i seng efter midnat. Kræver genstart af app.
diff --git a/uhabits-android/src/main/res/values-de-rDE/strings.xml b/uhabits-android/src/main/res/values-de-rDE/strings.xml
index d78a16617..aa21bfd11 100644
--- a/uhabits-android/src/main/res/values-de-rDE/strings.xml
+++ b/uhabits-android/src/main/res/values-de-rDE/strings.xml
@@ -99,7 +99,7 @@
Montag bis Freitag
Jeden Tag
Tage auswählen
- Daten als CSV exportieren
+ Exportiere als CSV
Fertig
Löschen
Stunden auswählen
@@ -118,18 +118,18 @@
Fehler beim Importieren der Daten.
Datei nicht erkannt.
Gewohnheiten erfolgreich importiert.
- Importiere Daten
+ Daten importieren
Exportiere vollständige Sicherung
- Unterstützt vollständige Sicherungen dieser App, sowie von Tickmate, HabitBull und Rewire erzeugte Sicherungen. Siehe FAQ für weitere Informationen.
+ Unterstützt vollständige Sicherungen dieser App, als auch von Tickmate, HabitBull und Rewire. Siehe FAQ für weitere Informationen.
Erstellt Dateien, die von Tabellenkalkulationsprogrammen wie Microsoft Excel oder LibreOffice Calc geöffnet werden können. Diese Dateien können nicht wieder importiert werden.
Erstellt eine Datei, die alle deine Daten enthält. Diese Datei kann wieder importiert werden.
Fehler beim Erstellen eines Fehlerberichts.
Erstelle einen Fehlerbericht
Fehlerbehebung
Hilf mit, diese App zu übersetzen
- Nachtmodus
+ Nachtmodus
Verwende reines Schwarz im Nachtmodus
- Ersetzt im Nachtmodus das Grau des Hintergrunds durch ein reines Schwarz. Reduziert den Stromverbrauch von Smartphones mit einem AMOLED Display.
+ Ersetzt im Nachtmodus das Grau des Hintergrunds durch Schwarz. Reduziert den Stromverbrauch von Smartphones mit AMOLED Displays.
Oberfläche
Kehre die Tagesreihenfolge um
Zeigt die Tage im Hauptfenster in umgekehrter Reihenfolge an.
@@ -211,6 +211,6 @@
Tage ohne Daten von tatsächlichen Lücken unterscheiden. Um eine Lücke einzutragen zweimal markieren.
Du bist nun ein Entwickler
Für diese Aktion wurde keine App gefunden.
- Den Tag um ein paar Stunden nach Mitternacht verlängern
+ Verlängere den Tag um ein paar Stunden nach Mitternacht
Bis 3:00 Uhr warten, bevor ein neuer Tag angezeigt wird. Nützlich, wenn du normalerweise nach Mitternacht schlafen gehst. Benötigt einen Neustart der App.
diff --git a/uhabits-android/src/main/res/values-el-rGR/strings.xml b/uhabits-android/src/main/res/values-el-rGR/strings.xml
index 7e324667a..8bd41559e 100644
--- a/uhabits-android/src/main/res/values-el-rGR/strings.xml
+++ b/uhabits-android/src/main/res/values-el-rGR/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop - Καταγραφή Συνηθειών
Συνήθειες
Ρυθμίσεις
@@ -28,15 +28,10 @@
Νέα συνήθεια
Αλλαγή χρώματος
Η συνήθεια δημιουργήθηκε
- Οι συνήθειες διαγράφηκαν
- Η συνήθεια άλλαξε
- Η συνήθεια αρχειοθετήθηκε.
- Έγινε αφαίρεση αρχειοθέτησης.
Επισκόπηση
Δύναμη συνήθειας
Ιστορικό
Εκκαθάριση
- ημέρες
Υπενθύμιση
Αποθήκευση
Σερί
@@ -64,20 +59,16 @@
Προσαρμογή
Κάντε εναλλαγή των επαναλήψεων με σύντομο πάτημα
Βολικότερο, αλλά ίσως προκαλέσει ακούσιες εναλλαγές.
- Διάστημα αναβολής υπενθυμίσεων
Βαθμολογήστε αυτή την εφαρμογή στο Google Play
Στείλετε σχόλια
Δείτε τον πηγαίο κώδικα στο GitHub
Σύνδεσμοι
Όνομα
Ρυθμίσεις
- Διάστημα αναβολής
Επιλογή καθυστέρησης αναβολής
Γνωρίζατε;
Αναδιατάξετε τις συνήθειες πατώντας παρατεταμένα στο όνομα και σύροντας στην σωστή θέση.
Μπορείτε να δείτε περισσότερες ημέρες στην οριζόντια προβολή.
- Διαγραφή συνηθειών
- Οι συνήθειες θα διαγραφτούν οριστικά. Αυτό δεν μπορεί να αναιρεθεί.
Η συνήθεια διαγράφηκε / δεν βρέθηκε
Σαββατοκύριακα
Δευτέρα μέχρι Παρασκευή
@@ -111,7 +102,7 @@
Παραγωγή αναφοράς bug.
Αντιμετ.Προβλημάτων
Βοηθήστε στην μετάφραση
- Νυχτ.Λειτ.
+ Νυχτ.Λειτ.
Χρήση απόλυτου μαύρου στη νυχτ.λειτουργία
Αντικαθιστά τα γκρί υπόβαθρα με απόλυτα μαύρα σε νυχτ.λειτουργία. Μειώνει την κατανάλωση μπαταρίας σε συσκευές με οθόνη AMOLED.
Διεπιφάνεια
@@ -170,15 +161,14 @@
(Προαιρετικό)
π.χ. Ξύπνησες νωρίς σήμερα; Ασκήθηκες; Έπαιξες σκάκι;
Μετρήσιμο
- π.χ. Πόσα χιλιόμετρα έτρεξες Πόσες σελίδες διάβασες; Πόσες θερμίδες έφαγες;
%d φορές την εβδομάδα
%d φορές το μήνα
π.χ. Σωματική άσκηση
Χρώμα
π.χ. 15
π.χ. Τρέξιμο
- π.χ. Πόσα χιλιόμετρα έτρεξες σήμερα?
- π.χ. χιλιόμετρα
+ π.χ. Πόσα χιλιόμετρα έτρεξες σήμερα?
+ π.χ. χιλιόμετρα
Κάθε μήνα
Δεν μπορεί να είναι κενό
Σήμερα
diff --git a/uhabits-android/src/main/res/values-eo-rUY/strings.xml b/uhabits-android/src/main/res/values-eo-rUY/strings.xml
index 081b4f1ad..780529432 100644
--- a/uhabits-android/src/main/res/values-eo-rUY/strings.xml
+++ b/uhabits-android/src/main/res/values-eo-rUY/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Habit Tracker
Kutimoj
Agordoj
@@ -29,27 +27,56 @@
Elarĥivigi
Aldonu kutimon
Ŝanĝi koloron
- Kutimo ŝanĝita
- Kutimo arĥivita
+ Kutimo kreita
+ Generala vidado
Kutimo forteco
- tagoj
+ Historio
+ Liberigi
Memorigaĵoj
Konservi
Strioj
+ Vi ne havas aktivajn kutimojn
+ Premu kaj tenu por kontroli aŭ malmarki
Neaktiva
+ Krei kutimon
+ Eldoni kutimon
+ Kontrolu
Poste
-
Bonvenon
+ Loop Habit Tracker helpas vin krei kaj konservi bonajn kutimojn.
+ Krei kelkajn novajn kutimojn
+ Ĉiutage, post plenumi vian kutimon, metu markostampon en la app.
+ Por atenti vian progreson:
+ Detalaj grafikaĵoj montras al vi kiel viaj kutimoj pliboniĝis kun la tempo.
15 minutoj
30 minutoj
+ 1 horo
+ 2 horoj
+ 4 horoj
+ 4 horoj
+ 24 horoj
+ Ĉiam demandu
+ Kutimo
+ Ŝalti per mallonga gazetaro
+ Metu markilojn per sola frapeto anstataŭ premi kaj teni. Pli oportune, sed eble kaŭzas hazardajn ŝanĝojn.
+ Taksu ĉi tiun aplikaĵon en Google Play
+ Sendu reagojn al programisto
+ Vidu fontkodon ĉe GitHub
+ Ligilo
+ Nomo
Agordoj
- Forigi kutimojn
+ Elektu dormetigas prokrasti
+ Ĉu vi sciis?
+ Por reordigi la enskribojn, premi kaj tenu la nomon de la kutimo, poste trenu ĝin al la ĝusta loko.
+ Vi povas vidi pliajn tagojn enmetante vian telefonon en pejzaĝa reĝimo.
+ Kutimo forigita / ne trovita
Semajnfinoj
Lundo al vendredo
Io semajntago
Elekti tagojn
Eksporti kiel CSV
Farite
+ Liberigi
Elekti horojn
Elekti minutojn
Pri programo
@@ -57,29 +84,73 @@
Evoluigantoj
Versio %s
Frekvenco
+ Markobutono
+ Plej bonaj strioj
Ĉiu tago
Ĉiu semajno
Helpo & Ofte Demandite
+ Malsukcesis eksporti datumojn.
+ Malsukcesis importi datumojn.
Dosiero ne rekonita.
+ Kutimoj importitaj sukcese.
+ Importi datumojn
+ Eksporti plenan sekurkopion
+ Elportas plenajn sekurkopiojn eksportitajn de ĉi tiu aplikaĵo, same kiel dosierojn generitajn de Tickmate, HabitBull aŭ Rewire. Vidu DPO por pliaj informoj.
+ Generas dosierojn, kiujn oni povas malfermi per kalkultabelaj programoj kiel Microsoft Excel aŭ OpenOffice Calc. Ĉi tiu dosiero ne povas esti importita reen.
+ Generas dosieron, kiu enhavas ĉiujn viajn datumojn. Ĉi tiu dosiero povas esti importita reen.
+ Malsukcesis generi raporton pri eraroj.
+ Generu raporton pri eraroj
Problemserĉado
- Nokta reĝimo
+ Helpu traduki ĉi tiun aplikon
+ Nokta reĝimo
+ Uzu puran nigron en malhela temo
+ Anstataŭigas grizajn fonojn per pura nigra en malhela temo. Reduktas baterian uzon en telefonoj kun AMOLED-ekrano.
+ Intervizago
+ Reversa ordo de tagoj
+ Montri tagojn en inversa ordo sur la ĉefa ekrano.
Tago
Semajno
Monato
Jarkvarono
Jaro
-
-
+ Totalo
+ Jes aŭ ne
+ Ĉiujn %d tagojn
+ Ĉiuj %d semajnoj
+ Poentaroj
+ rememor-sonorilo
Nenio
Filtrilo
Kaŝi kompletajn
Kaŝi arĥivitajn
+ Faru sciigojn gluaj
+ Malhelpas, ke sciigoj estu forglititaj.
+ Atentiga lumo
+ Montras palpebrumantan lumon por memorigiloj. Nur havebla en telefonoj kun LED-sciigaj lumoj.
Ripari datumbazon
Datumbazon riparita.
+ Malmarku
+ Ŝalti
Ago
Kutimo
Enkursigi
+ Mane
Laŭ nomo
Laŭ koloro
+ Laŭ poentaro
Eksporti
+ Premu kaj tenu por ŝanĝi la valoron
+ Ŝanĝi valoron
+ Kalendaro:
+ Unueco
+ ekz. Ĉu vi ekzercis hodiaŭ?
+ Demando
+ Celo
+ Jes
+ Ne
+ Ŝanĝu sonon, vibron, lumon kaj aliajn sciigajn agordojn
+ Adaptitaj sciigoj
+ Vidu privatecan politikon
+ Rigardi ĉiujn kontribuantojn…
+ Datumbazo
diff --git a/uhabits-android/src/main/res/values-es-rES/strings.xml b/uhabits-android/src/main/res/values-es-rES/strings.xml
index c65099808..30b4cc448 100644
--- a/uhabits-android/src/main/res/values-es-rES/strings.xml
+++ b/uhabits-android/src/main/res/values-es-rES/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Analizador de Hábitos
Hábitos
Configuración
@@ -28,19 +28,31 @@
Agregar hábito
Cambiar color
Hábito creado
- Hábitos eliminados
- Hábito cambiado
- Hábitos archivados
- Hábitos desarchivados
+
+ - Hábito cambiado
+ - Hábitos cambiados
+
+
+ - Hábito eliminado
+ - Hábitos eliminados
+
+
+ - Hábito archivado
+ - Hábitos archivados
+
+
+ - Hábito desarchivado
+ - Hábitos desarchivados
+
Resumen
Fuerza del hábito
Historial
Borrar
- días
Recordatorio
Guardar
Rachas
No tienes hábitos activos
+ ¡Ya terminaste todo por hoy!
Mantener apretado para marcar o desmarcar
Apagado
Crear hábito
@@ -64,20 +76,24 @@
Personalizar...
Marca las repeticiones con una pulsación corta
Más cómodo, pero puede causar marcas accidentales.
- Tiempo de espera al aplazar recordatorios
Valora esta aplicación en Google Play
Enviar sugerencias al desarrollador
Ver código fuente en GitHub
Enlaces
Nombre
Configuración
- Intervalo de espera
Seleccione el retardo de la interrupción
¿Sabías qué?
Para reordenar las entradas, mantén la pulsado sobre el nombre del hábito, después arrástralo a su posición correcta.
Puedes ver más días al poner tu teléfono en modo horizontal.
- Eliminar Hábitos
- Los hábitos serán eliminados permanentemente. Esta acción no se puede deshacer.
+
+ - ¿Eliminar hábito?
+ - ¿Eliminar hábitos?
+
+
+ - El hábito se eliminará permanentemente. Esta acción no se puede deshacer.
+ - Los hábitos se eliminarán permanentemente. Esta acción no se puede deshacer.
+
Hábito eliminado / no encontrado
Fines de semana
De lunes a viernes
@@ -111,7 +127,7 @@
Generar reporte de errores
Solución de problemas
Ayuda a traducir esta app
- Modo nocturno
+ Modo nocturno
Utilizar color negro en modo nocturno
Reemplaza fondos grises por color negro en modo nocturno. Reduce el consumo de batería en teléfonos con pantalla AMOLED.
Interfície
@@ -147,6 +163,7 @@
Por nombre
Por color
Por puntuación
+ Por estado
Exportar
Mantenga presionado para cambiar el valor
Cambiar valor
@@ -170,16 +187,30 @@
(Opcional)
por ejemplo, ¿te despertaste temprano hoy? ¿Hiciste ejercicio? ¿Jugaste al ajedrez?
Medible
- por ejemplo, ¿cuántos quilómetros has corrido hoy? ¿Cuántas páginas has leído? ¿Cuántas calorías has comido?
+ ej. ¿Cuántas millas ha corrido hoy? ¿Cuántas páginas ha leído?
%d veces por semana
%d veces al mes
ej. Ejercicio
Color
ej. 15
por ejemplo, correr
- ej. ¿Cuántos quilómetros has corrido hoy?
- ej. millas
+ ej. ¿Cuántos quilómetros has corrido hoy?
+ ej. millas
Cada mes
No puede estar en blanco
Hoy
+ Introducir
+ No se encontraron hábitos
+ No se encontraron hábitos medibles
+ No se encontraron hábitos de sí o no
+ Incrementar
+ Decrementar
+ Habilitar días libres
+ Alternar dos veces para agregar un salto en lugar de una marca de verificación. Los saltos mantienen su puntaje sin cambios y no rompen su racha.
+ Mostrar interrogantes para datos faltantes
+ Diferenciar los días sin datos de los lapsos reales. Para ingresar un lapso, alternar dos veces.
+ Ahora eres desarrollador
+ No se encontró ninguna aplicación que admita esta acción
+ Ampliar día unas horas después de medianoche
+ Esperar hasta las 3:00 AM para mostrar un nuevo día. Útil si normalmente vas a dormir después de medianoche. Requiere reiniciar la aplicación.
diff --git a/uhabits-android/src/main/res/values-eu-rES/strings.xml b/uhabits-android/src/main/res/values-eu-rES/strings.xml
index fc92b5725..cdffcab40 100644
--- a/uhabits-android/src/main/res/values-eu-rES/strings.xml
+++ b/uhabits-android/src/main/res/values-eu-rES/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Habit Tracker
Ohiturak
Ezarpenak
@@ -28,15 +28,10 @@
Gehitu ohitura
Kolorea aldatu
Ohitura sortu da
- Ohiturak ezabatu dira
- Ohitura aldatu egin da
- Ohiturak artxibatu dira
- Ohiturak desartxibatu dira
Ikuspegi orokorra
Ohituraren indarra
Historia
Garbitu
- egunetan
Oroigarria
Gorde
Boladak
@@ -64,20 +59,16 @@
Pertsonalizatua...
Ukitze laburrarekin markatu
Ukitze bakar batekin marka jartzen du ukitu eta mantendu egin beharrean. Erosoagoa, baina nahi gabeko markak ekar litzake.
- Atzeratze tartea oroigarrietan
Aplikazio hau Google Playen puntuatu
Zure iritzia garatzaileari bidali
Iturburu kodea GitHuben ikusi
Loturak
Izena
Ezarpenak
- Atzeratze tartea
Aukeratu atzerapen denbora
Ba al zenekien?
Sarrerak berrantolatzeko, sakatu eta mantendu ohituraren izena, ondoren mugi ezazu leku aproposera.
Egun gehiago ikus ditzakezu zure gailua paisai moduan jarriz.
- Ohiturak ezabatu
- Ohiturak betirako ezabatuko dira. Ekintza hau ezin da desegin.
Ohitura ezabatua / ez aurkitua
Asteburuak
Astelehenetik ostiralera
@@ -111,7 +102,7 @@
Akats txostena sortu
Arazoen konponketa
Lagundu aplikazio hau itzultzen
- Azal iluna
+ Azal iluna
erabili beltz hutsa azal ilunean
Atzeko plano grisak beltz hutsez aldatzen ditu azal ilunean. Bateriaren erabilera gutxitzen du AMOLED duten gailuetan.
Interfazea
@@ -170,15 +161,14 @@
(Aukerazkoa)
adib. Gaur goiz esnatu zara? Ariketa fisikoa egin al duzu? Xakean jolastu al duzu?
Neurgarria
- adib. Zenbat kilometro egin dituzu korrika gaur? Zenbat orrialde irakurri dituzu? Zenbat kaloria jan dituzu?
Astean %d aldiz
Hilean %d aldiz
adib. Ariketa
Kolorea
adib. 15
adib. Korrika egin
- adib. Zenbat kilometro egin dituzu korrika gaur?
- adib. Kilometroak
+ adib. Zenbat kilometro egin dituzu korrika gaur?
+ adib. Kilometroak
Hilabetero
Ezin da hutsik egon
Gaur
diff --git a/uhabits-android/src/main/res/values-fa-rIR/strings.xml b/uhabits-android/src/main/res/values-fa-rIR/strings.xml
index 635c6f5b9..98730e033 100644
--- a/uhabits-android/src/main/res/values-fa-rIR/strings.xml
+++ b/uhabits-android/src/main/res/values-fa-rIR/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Habit Tracker
عادتها
تنظیمات
ویرایش
حذف
- بایگانی کن
+ بایگانی کردن
خارج کردن از بایگانی
افزودن عادت
تغییر رنگ
عادت ایجاد شد
- عادت حذف شد
- عادت تغییر کرد.
- عادتها بایگانی شدند
- عادتها از بایگانی خارج شدند
+
+ - عادت تغییر داده شد
+ - عادتها تغییر داده شدند
+
+
+ - عادت حذف شد.
+ - عادتها حذف شدند.
+
+
+ - عادت بایگانی شد.
+ - عادتها بایگانی شدند.
+
+
+ - عادت از بایگانی خارج شد.
+ - عادتها از بایگانی خارج شدند.
+
مرور
قدرت عادت
تاریخچه
پاک کردن
- روز ها
- یادآور
+ یادآوری
ذخیره
- روزهای پیوسته
+ استمرارها
شما هیچ عادت فعالی ندارید
- برای تیک زدن یا برداشتن، ضربه بزنید و نگه دارید
- خاموش
+ شما همه موارد مربوط به امروز را انجام دادهاید!
+ برای تیک زدن یا برداشتن، تپ کنید و نگه دارید
+ غیرفعال
ساخت عادت جدید
ویرایش عادت
تیک زدن
بعداً
خوش آمدید
- رهگیر عادت لوپ به شما کمک میکند تا برای خودتان عادتهای خوبی بسازید.
+ عادتسنج لوپ به شما کمک میکند تا برای خودتان عادتهای خوبی بسازید.
ساخت چند عادت جدید
- هر روز، بعد از انجام عادت، آن را در برنامه تیک بزنید.
- پیشرفت خود را رهگیری کنید
+ هر روز بعد از انجام عادت، آن را در برنامه تیک بزنید.
+ پیشرفت خود را پیگیری کنید
نمودار جزئیات به شما نشان میدهد که چطور عادتهایتان با گذشت زمان بهبود پیدا کردهاند.
۱۵ دقیقه
۳۰ دقیقه
- ۱ ساعتذ
+ ۱ ساعت
۲ ساعت
۴ ساعت
۸ ساعت
۲۴ ساعت
همیشه پرسیده شود
- سفارشی سازی
+ سفارشیسازی
با اشارهی کوتاهمدت وضعیت عادت را تغییر بده
تیک زدن با تکضربه در مقابل ضربهزدن و نگهداشتن راحتتر است ولی ممکن است باعث شود اشتباهی عادتی را تیک بزنید.
- بازه به تعویق انداختن یادآورها
به این برنامه در گوگلپلی امتیاز بدهید
ارسال بازخورد به توسعهدهنده
دیدن منبع برنامه در گیتهاب
- لینکها
+ پیوندها
نام
تنظیمات
- بازه به تعویق انداختن
تأخیر تعویق را انتخاب کنید
- آیا می دانستید؟
+ آیا میدانستید؟
برای جابجایی عناوین، انگشتتان را روی نام عادت مورد نظر بگذارید و نگه دارید، سپس آن را به محل صحیح بکشید.
با قرار دادن گوشی در حالت افقی میتوانید روزهای بیشتری را ببینید.
- حذف عادتها
- عادتها برای همیشه حذف خواهد شد. این عمل قابل بازگشت نیست.
- عادت حذف شده/ پیدا نشد
+
+ - حذف عادت؟
+ - حذف عادتها؟
+
+
+ - این عادت برای همیشه حذف خواهد شد و قابل بازیابی نخواهد بود.
+ - این عادتها برای همیشه حذف خواهند شد و قابل بازیابی نخواهند بود.
+
+ عادت حذف شده / پیدا نشد
آخر هفتهها
دوشنبه تا جمعه
هر روز هفته
انتخاب روزها
- صدور فایل CSV
+ خروجی فایل CSV
انجام شد
پاک کردن
انتخاب ساعت
@@ -98,12 +114,12 @@
هر روز
هر هفته
راهنما و سوالات متداول
- خطا در صدور اطلاعات.
- خطا در وارد کردن اطلاعات.
- پرونده شناخته شده نیست.
+ خطا در خروجی گرفتن از دیتا.
+ خطا در وارد کردن دیتا.
+ فایل شناخته شده نیست.
عادتها با موفقیت وارد شدند.
- ورود اطلاعات
- پشتیبان گیری کامل
+ وارد کردن دیتا
+ پشتیبانگیری کامل
علاوه بر پشتیبان کامل تهیه شده توسط این برنامه، از پروندههای تولید شده توسط Tickmate، HabitbBull و یا Rewire هم پشتیبانی میشود. برای اطلاعات بیشتر سوالات متداول را ببینید.
پروندهای تولید میکند که میتوان توسط برنامههای صفحه گسترده مانند Microsoft Excel و یا OpenOffice Calc بازشان کرد. این پرونده قابلیت وارد کردن مجدد به این برنامه را ندارد.
پروندهای تولید میکند که شامل تمام اطلاعات شما است. این پرونده قابل بازیابی توسط این برنامه میباشد.
@@ -111,12 +127,12 @@
ایجاد گزارش مشکلات
ایرادیابی
کمک برای ترجمه این برنامه
- حالت شب
- استفاده از رنگ سیاه خالص در حالت شبانه
- جایگزینی پس زمینه خاکستری با سیاه خالص در حالت شب. استفاده از باتری در گوشیهای با صفحه نمایش AMOLED را کاهش میدهد.
+ حالت تیره
+ استفاده از رنگ سیاه خالص در حالت تیره
+ جایگزینی پسزمینه خاکستری با سیاه خالص در حالت تیره. استفاده از باتری را در گوشیهای با صفحه نمایش AMOLED کاهش میدهد.
رابط کاربری
معکوس کردن ترتیب روزها
- روزها را در صفحه اصلی با ترتیب معکوس نمایش میدهد
+ روزها را در صفحه اصلی با ترتیب معکوس نمایش میدهد.
روز
هفته
ماه
@@ -130,56 +146,71 @@
صدای یادآور
هیچکدام
فیلتر
- مخفی کردن کامل شدهها
- مخفی کردن بایگانی شدهها
+ مخفی کردن کاملشدهها
+ مخفی کردن بایگانیشدهها
چسبناک کردن اعلانها
از رد کردن اعلان با کشیدن جلوگیری میکند.
چراغ اعلان
- یک چراغ چشمک زن برای یادآوری ها نشان می دهد. فقط در تلفن های دارای چراغ های اعلان ال ای دی موجود است.
- تعمیر پایگاه داده
- پایگاه داده تعمیر شد.
+ یک چراغ چشمکزن برای یادآوریها نشان میدهد. فقط در گوشیهای دارای چراغهای اعلان LED موجود است.
+ تعمیر دیتابیس
+ دیتابیس تعمیر شد.
برداشتن تیک
تغییر وضعیت
اقدام
عادت
مرتبسازی
دستی
- بر اساس نام
- بر اساس رنگ
- بر اساس امتیاز
- صدور
- فشار و نگه دارید تا مقدار را تغییر دهید
+ براساس نام
+ براساس رنگ
+ براساس امتیاز
+ براساس وضعیت
+ خروجی گرفتن
+ فشار دهید و نگه دارید تا مقدار را تغییر دهید
تغییر مقدار
تقویم
- Unit
- مثلا امروز ورزش کردید؟
- پرسش
+ واحد
+ مثلا آیا امروز ورزش کردید؟
+ سوال
هدف
بله
نه
- تنظیمات صدا ، لرزش ، نور و سایر تنظیمات را تغییر دهید
- اعلان ها را سفارشی کنید
+ صدا، لرزش، نور و سایر تنظیمات را تغییر دهید
+ اعلانها را سفارشیسازی کنید
مشاهده سیاست حفظ حریم خصوصی
مشاهده همه همکاران…
- پایگاه داده
+ دیتابیس
تیرگی ویجت
- ویجت ها را در صفحه اصلی شفاف تر یا مات می کند.
+ ویجتها را در صفحه اصلی شفافتر یا ماتتر میکند.
روز اول هفته
- آیا امروز این عادت را کامل کرده اید؟
- یادداشت
+ آیا امروز این عادت را انجام دادهاید؟
+ یادداشتها
(اختیاری)
- آیا امروز زود بیدار شدید؟ ورزش کردی؟ شطرنج بازی کردی؟
- قابل اندازه گیری
- امروز چند مایل را طی کردید؟ چند صفحه خواندید؟ چند کالری خوردید؟
+ آیا امروز زود بیدار شدید؟ ورزش کردید؟ شطرنج بازی کردید؟
+ قابل اندازهگیری
+ مثلاً امروز چند کیلومتر دویدید؟ چند صفحه مطالعه کردید؟
%d بار در هفته
%d بار در ماه
مثلاً ورزش کنید
رنگ
مثلاً 15
- مثلاً اجرا کنید
- امروز چند مایل را طی کردید؟
- مایل ها
+ مثلاً دویدن
+ مثلاً امروز چند کیلومتر دویدید؟
+ مثلاً کیلومتر
هر ماه
- نمیتواند خالی باشد
+ نمیتواند خالی باشد
امروز
+ وارد کردن
+ عادتی یافت نشد
+ عادت قابلاندازهگیری یافت نشد
+ عادت بله/خیر یافت نشد
+ افزایش
+ کاهش
+ فعال کردن پریدن از روزها
+ دو بار تپ کنید تا به جای تیک زدن، از آن روز بپرید. پریدن از یک روز، امتیاز شما را دستنخورده نگهمیدارد و استمرار عادت را خراب نمیکند.
+ نمایش علامت سوال برای مواردی که دیتایی وجود ندارد
+ روزهایی که دیتا ندارند و آنهایی که از رویشان پریدهاید را متفاوت نشان میدهد. برای پریدن از روی یک روز، دو بار روی آن تپ کنید.
+ شما اکنون یک توسعهدهنده هستید
+ هیچ برنامهای برای انجام این کار یافت نشد.
+ تمدید کردن روز تا چند ساعت بعد از نیمهشب
+ تا ساعت ۳ نیمهشب برای نمایش یک روز جدید صبر میکند. اگر معمولاً بعد از نیمهشب میخوابید، برای شما میتواند مفید باشد. نیازمند راهاندازی مجدد برنامه است.
diff --git a/uhabits-android/src/main/res/values-fi-rFI/strings.xml b/uhabits-android/src/main/res/values-fi-rFI/strings.xml
index 9186ddad3..ca001b0ad 100644
--- a/uhabits-android/src/main/res/values-fi-rFI/strings.xml
+++ b/uhabits-android/src/main/res/values-fi-rFI/strings.xml
@@ -17,39 +17,48 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Habit Tracker
Rutiinit
Asetukset
Muokkaa
Poista
Arkistoi
+ Kumoa arkistointi
Lisää rutiini
Vaihda väriä
Rutiini luotu
- Rutiinit poistettu
- Rutiini muutettu
- Rutiinit arkistoitu
- Rutiinit palautettu arkistosta
+
+ - Rutiini muutettu
+ - Rutiinit muutettu
+
+
+ - Rutiini poistettu
+ - Rutiinit poistettu
+
+
+ - Rutiini arkistoitu
+ - Rutiinit arkistoitu
+
+
+ - Rutiini palautettu arkistosta
+ - Rutiinit palautettu arkistosta
+
Yleiskatsaus
Rutiinin vahvuus
Historia
Tyhjennä
- kertaa
- päivässä
Muistutus
Tallenna
Pisimmät toistot
Ei aktiivisia rutiineja
- Paina pitkään merkitäksesi suoritetuksi tai postaaksesi suorituksen
+ Olet tältä päivältä valmis!
+ Paina pitkään merkitäksesi suoritetuksi tai poistaaksesi suorituksen
Pois päältä
Luo rutiini
Muokkaa rutiinia
- Tehty
+ Merkitse tehdyksi
Lykkää
-
Tervetuloa
Loop Habit Tracker auttaa sinua luomaan ja ylläpitämään hyviä rutiineja.
Merkitse uusia rutiineja
@@ -63,6 +72,8 @@
4 tuntia
8 tuntia
24 tuntia
+ Kysy aina
+ Muu
Vaihda merkintää lyhyellä painalluksella
Tee merkit yhdellä painalluksella pitkän painalluksen sijaan. Kätevämpi, mutta saattaa aiheuttaa vahingossa painamista.
Arvostele Google Playssä
@@ -71,22 +82,135 @@
Linkit
Nimi
Asetukset
+ Aseta torkkuaika
Tiesitkö?
+ Muokkaa merkintöjen järjestystä: valitse tavan nimi ja vedä se oikeaan paikkaan.
+ Näe lisää päiviä kääntämällä puhelimesi pitkittäin.
+
+ - Poista rutiini?
+ - Poista rutiinit?
+
+
+ - Rutiini poistetaan pysyvästi. Toimintoa ei voi peruuttaa.
+ - Rutiinit poistetaan pysyvästi. Toimintoa ei voi peruuttaa.
+
+ Tapa on poistettu tai sitä ei löydy
+ Viikonloppuisin
+ Maanantaista perjantaihin
+ Mikä tahansa viikonpäivä
+ Valitse päivät
+ Vie CSV-muodossa
Valmis
Tyhjennä
+ Valitse tunnit
+ Valitse minuutit
+ Tietoa sovelluksesta
Kääntäjät
Kehittäjät
Versio %s
+ Toistuvuus
+ Valintamerkki
+ Parhaat putket
Joka päivä
Joka viikko
- Yötila
+ Ohjeita ja usein kysyttyä
+ Tietojen vienti ei onnistunut.
+ Tietojen tuominen ei onnistunut.
+ Tiedostoa ei tunnistettu.
+ Rutiinit tuotu onnistuneesti.
+ Tuo tiedot
+ Vie täysi varmuuskopio
+ Tukee tästä sovelluksesta vietyjä täysiä varmuuskopioita, sekä tiedostoja jotka on luotu sovelluksissa Tickmate, HabitBull ja Rewire. Katso usein kysytyistä kysymyksistä lisätietoa.
+ Luo tiedostoja jotka voidaan avata taulukkolaskentaohjelmistolla, kuten Microsoft Excel tai OpenOffice Calc. Tätä tiedostoa ei voi tuoda takaisin.
+ Luo tiedoston jossa on kaikki tietosi. Tämä tiedosto voidaan tuoda takaisin.
+ Virheraportin luonti epäonnistui.
+ Luo virheraportti
+ Apua
+ Auta kääntämään tämä sovellus
+ Yötila
Käytä puhdasta mustaa yötilassa
+ Korvaa harmaat taustat puhtaalla mustalla tummalla teemalla. Vähentää akun käyttöä puhelimissa AMOLED-näytöllä.
+ Käyttöliittymä
+ Päivät käänteisessä järjestyksessä
+ Näytä päivät käänteisessä järjestyksessä päänäytöllä.
Päivä
Viikko
Kuukausi
Kvartaali
Vuosi
Yhteensä
-
-
+ Kyllä vai ei?
+ %d päivän välein
+ %d viikon välein
+ Pisteet
+ Muistutusääni
+ Ei mitään
+ Suodata
+ Piilota suoritetut
+ Piilota arkistoidut
+ Tee ilmoituksesta kiinnitettyjä
+ Estää ilmoitusten pois pyyhkäisemisen.
+ Ilmoitusvalo
+ Näyttää vilkkuvan valon ilmoituksista. Vain puhelimissa joissa on LED-ilmoitusvalo.
+ Korjaa tietokanta
+ Tietokanta korjattu.
+ Poista tehdyksi merkintä
+ Tilanvaihto
+ Toiminta
+ Rutiini
+ Järjestä
+ Käsin
+ Nimen mukaan
+ Värin mukaan
+ Pisteiden mukaan
+ Tilan mukaan
+ Vie
+ Pidä painettuna muuttaaksesi arvoa
+ Muuta arvo
+ Kalenteri
+ Yksikkö
+ esim. Harrastitko tänään liikuntaa?
+ Kysymys
+ Tavoite
+ Kyllä
+ Ei
+ Muuta ilmoitusten ääntä, värinää, valoa ja muita asetuksia
+ Mukauta ilmoituksia
+ Katso tietosuojakäytäntö
+ Näytä kaikki osallistujat…
+ Tietokanta
+ Widgetin läpinäkyvyys
+ Muuttaa kotinäkymän widgettien läpinäkyvyyttä.
+ Viikon ensimmäinen päivä
+ Oletko suorittanut tämän tavan tänään?
+ Muistiinpanot
+ (Valinnainen)
+ Esim. heräsitkö tänään aikaisin? Kuntoilitko? Pelasitko sakkia?
+ Mitattava
+ esim. Montako kilometriä juoksit tänään? Montako sivua luit?
+ %d kertaa viikossa
+ %d kertaa kuukaudessa
+ Esim. kuntoilu
+ Väri
+ Esim. 15
+ Esim. juokse
+ Esim. kuinka monta kilometriä juoksit tänään?
+ Esim. kilometriä
+ Joka kuukausi
+ Tätä ei voi jättää tyhjäksi
+ Tänään
+ Syötä
+ Rutiineja ei löydetty
+ Mitattavia rutiineja ei löytynyt
+ Kyllä-tai-ei-rutiineja ei löytynyt
+ Nosta
+ Laske
+ Ota ohituspäivät käyttöön
+ Valitse kahdesti lisätäksesi ohituksen valinnan sijaan. Ohitukset pitävät pisteesi muuttumattomana eivätkä riko suoritusputkeasi.
+ Näytä kysymysmerkki puuttuvan tiedon kohdalla
+ Erota päivät ilman tietoja todellisista väliin jäämisistä. Lisätäksesi väliin jäämisen, valitse kahdesti.
+ Olet nyt kehittäjä
+ Tälle toiminnolle ei löytynyt yhtään sovellusta
+ Pidennä päivää muutama tunti keskiyön jälkeen
+ Odota kello 3.00 asti ennen uuden päivän näyttämistä. Hyödyllinen jos menet nukkumaan yleensä keskiyön jälkeen. Vaatii sovelluksen uudelleenkäynnistyksen.
diff --git a/uhabits-android/src/main/res/values-fr-rFR/strings.xml b/uhabits-android/src/main/res/values-fr-rFR/strings.xml
index 25d07bc5b..7f57fcc16 100644
--- a/uhabits-android/src/main/res/values-fr-rFR/strings.xml
+++ b/uhabits-android/src/main/res/values-fr-rFR/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop - Suivi d\'habitudes
Habitudes
Paramètres
@@ -28,19 +28,31 @@
Ajouter une habitude
Changer la couleur
Habitude créée
- Habitudes supprimées
- Habitude changée
- Habitudes archivées
- Habitudes désarchivées
+
+ - Habitude modifiée
+ - Habitudes modifiées
+
+
+ - Habitude supprimée
+ - Habitudes supprimées
+
+
+ - Habitude archivée
+ - Habitudes archivées
+
+
+ - Habitude désarchivée
+ - Habitudes désarchivées
+
Vue d\'ensemble
Force de l\'habitude
Historique
Supprimer
- jours
Rappel
Sauvegarder
Séries
Vous n\'avez pas d\'habitudes actives
+ Vous avez fait toutes vos habitudes d\'aujourd\'hui !
Appuyez longtemps pour cocher ou décocher
Aucun
Créer une habitude
@@ -64,20 +76,24 @@
Personnaliser...
Valider l\'habitude avec un appui court
Valide l\'habitude avec un appui court plutôt qu\'un appuie long. Plus pratique, mais peut causer des activations accidentelles.
- Intervalle de report des rappels
Notez cette app sur le Google Play Store
Envoyez un avis au développeur
Voir le code source sur GitHub
Liens
Nom
Paramètres
- Intervalle de report
Définir le délai de répétition
Le saviez-vous ?
Pour réordonner les habitudes, faites un appui long sur le nom de l\'habitude et placez-la à la bonne place.
Vous pouvez voir plus de jours en mettant votre téléphone en mode paysage.
- Supprimer des habitudes
- Les habitudes seront supprimées définitivement. Cette action est irréversible.
+
+ - Supprimer cette habitude ?
+ - Supprimer ces habitudes ?
+
+
+ - L\'habitude va être supprimée définitivement. Cette action ne peut pas être annulée.
+ - Les habitudes vont être supprimées définitivements. Cette action ne peut pas être annulée.
+
Habitude supprimée / introuvable
Weekends
Du lundi au vendredi
@@ -111,7 +127,7 @@
Générer un rapport de bug.
Résolution de problèmes
Aider à traduire cette application
- Mode Nuit
+ Mode Nuit
Utiliser un noir pur dans le mode nuit
Remplace le fond gris par un noir pur dans le mode nuit ; cela réduit l’usage de la batterie des appareils ayant un écran AMOLED.
Interface
@@ -147,6 +163,7 @@
Par nom
Par couleur
Par score
+ Par statut
Exporter
Appuyez et maintenez pour changer la valeur
Modifier la valeur
@@ -170,16 +187,31 @@
(Facultatif)
Par exemple, vous êtes-vous réveillé tôt aujourd\'hui ? Avez-vous fait de l\'exercice ? Avez-vous joué aux échecs ?
Quantifiable
- Par exemple, combien de km avez-vous couru aujourd\'hui ? Combien de pages avez-vous lu ? Combien de calories avez-vous mangé ?
+ Par exemple : Quelle distance avez vous parcouru aujourd\'hui ?
+Combien de pages avez-vous lu ?
%d fois par semaine
%d fois par mois
Par ex, Entrainement
Couleur
Par ex, 15
Par ex, Courir
- Par ex, Combien de km avez-vous couru aujourd\'hui?
- Par ex, km
+ Par ex, Combien de km avez-vous couru aujourd\'hui?
+ Par ex, km
Tous les mois
Ne peut pas être vide
Aujourd\'hui
+ Inscrire
+ Aucune habitude trouvée :(
+ Aucune habitude quantifiable trouvée
+ Aucune habitude binaire trouvée
+ Augmenter
+ Diminuer
+ Pouvoir passer des jours
+ Appuyer deux fois pour passer un jour au lieu de valider. Passer des jours ne change pas votre score et ne brise pas votre série.
+ Afficher des points d\'interrogations pour les données manquantes
+ Différentié les jours sans donnée des jours sans avoir fait les habitudes. Pour passer un jour, appuyez deux fois longtemps au lieu d\'une seul fois.
+ Vous êtes désormais un développeur !
+ Aucune application trouvée pour faire cette action
+ Prolonger les jours de quelques heures après minuit
+ Attendre jusqu\'à trois heures du matin pour changer de jour. Très utile si vous avez l\'habitude d\'aller dormir après minuit. (Redémarrage nécessaire)
diff --git a/uhabits-android/src/main/res/values-hi-rIN/strings.xml b/uhabits-android/src/main/res/values-hi-rIN/strings.xml
index 2b9c83ccd..2d107b1b3 100644
--- a/uhabits-android/src/main/res/values-hi-rIN/strings.xml
+++ b/uhabits-android/src/main/res/values-hi-rIN/strings.xml
@@ -17,42 +17,45 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop - आदत पर नजर
आदतें
सेटिंग्स
संपादित करें
हटाएँ
- संग्रहीत करें
- असंगृहीत करें
+ संग्रहित करें
+ असंग्रहीत करें
आदत जोड़ें
रंग बदलें
आदत बनायी गई
- आदत हटाई गई
- आदत बहाल
- आदत संग्रहीत
- आदत असंग्रहीत
+
+ - आदत हटाई गई
+ - आदतें हटाई गई
+
+
+ - आदत संग्रहित की गई
+ - आदतें संग्रहीत की गई
+
+
+ - आदत असंग्रहीत की गई
+ - आदतें असंग्रहीत की गई
+
अवलोकन
आदत शक्ति
पूर्वलेख
साफ करें
- बार
- दिन
अनुस्मारक
सहेजें
प्रवर्ति
\"आपकी कोई सक्रिय आदत नही है
\"
+ आप के आज के सभी कार्य समाप्त होते हैं
चेक या अनचेक करने के लिए दबाएँ व दबाएँ रखें
बंद
- आदत उत्पन्न करें
- आदत संपादित करें
- \"
-चेक\"
+ नयी आदत बनाएं
+ आदत में बद्लाव करें
+ अंकित करें
बाद में
-
\"
स्वागत हे\"
लूप हैबिट ट्रैकर नई और अच्छी आदतों को बनाए रखने मे मदद करता है ।
@@ -62,13 +65,15 @@
अपनी प्रगति को ट्रैक करें\"
\"
विस्तृत रेखांकन आपको बताएंगे कि कैसे अपनी आदतों में समय के साथ सुधार करें\"
- 15 मिनिट
- 30 मिनिट
- 1 घंटा
- 2 घंटा
+ १५ मिनट
+ ३० मिनट
+ १ घंटा
+ २ घंटे
4 घंटा
8 घंटा
24 घंटे
+ हमेशा पूछें
+ अपने तरीके से बनाएं
टॉगल पुनरावृत्ति हल्का दबाने से
\"
अधिक सुविधाजनक है, लेकिन आकस्मिक टॉगल हो सकता है ।\"
@@ -79,14 +84,20 @@
लिंक
नाम
सेटिंग्स
+ स्नूज़ देरी का चयन करें
क्या आप जानते .?
\"
प्रविष्टियों को पुनर्व्यवस्थित करने के लिए, आदत के नाम पर प्रेस करें और सही जगह पर खींचें।\"
\"
अपने फोन को लांडसकपे मोड मे रख कर आप अधिक दिनों से देख सकते हैं\"
- आदत हटाएँ
- \"
-आदतों को स्थायी रूप से हटा दिया जाएगा। इस क्रिया को पूर्ववत नहीं किया जा सकता है।\"
+
+ - आदत हटाये?
+ - आदत हटाएँ
+
+
+ - आदत हमेशा के लिये हटा दी जाएगी। इसे वापस नहीं लाया जा सकता।
+ - आदतें हमेशा के लिये हटा दी जाएगी। उन्हे वापस नहीं लाया जा सकता।
+
आदत हटाई गई / नहीं मिली
\"
सप्ताहांत\"
@@ -138,7 +149,7 @@
समस्या निवारण\"
\"
इस एप्लिकेशन का अनुवाद करने में मदद करें\"
- नाइट मोड
+ नाइट मोड
नाइट मोड मे पूरा काला यूज़ करें
\"
रात मोड में शुद्ध काले रंग के साथ ग्रे पृष्ठभूमि में बदलें. अमोलेड प्रदर्शन के साथ फोन में बैटरी उपयोग कम कर देता है ।\"
@@ -152,8 +163,7 @@
तिमाही
साल
कुल
-
-
+ हाँ या नहीं
\"
हर %d दिन\"
\"
@@ -167,6 +177,8 @@
संग्रहीत छुपाएं
सुचनाए स्थयी रखे
नोटिफिकेशन को स्वाइप करने से रोकता है!
+ नोटिफिकेशन लाइट
+ स्मरण के लिए एक चमकती रोशनी दिखाता है। यह केवल एलईडी नोटिफिकेशन लाइट वाले फोन में उपलब्ध है।
डेटाबेस को रिपेयर करें
डेटाबेस रिपेयर सफल
निशान हटाएँ
@@ -178,5 +190,56 @@
नाम द्वारा
रंग द्वारा
स्कोर से
+ स्थिति से
एक्सपोर्ट करे
+ बदलने के लिए दबाकर रखें
+ वैल्यू बदलें
+ कैलेंडर
+ इकाई
+ जैसे आपने आज व्यायाम किया?
+ प्रश्न
+ लक्ष्य
+ हाँ
+ नहीं
+ ध्वनि, कंपन, प्रकाश और अन्य अधिसूचना सेटिंग्स बदलें
+ सूचनाएं कस्टमाइज़ करें
+ गोपनीयता नीति देखें
+ सभी योगदानकर्ता देखें…
+ डेटाबेस
+ विजेट अपारदर्शिता
+ आपके होम स्क्रीन में अधिक पारदर्शी या अधिक अपारदर्शी बनाता है।
+ सप्ताह का पहला दिन
+ क्या आपने आज यह आदत पूरी कर ली है?
+ नोट्स
+ वैकल्पिक
+ उदा। क्या आप आज जल्दी उठ गए? क्या आपने व्यायाम किया? क्या आपने शतरंज खेला?
+ मापें
+ जैसे आज आप कितने मील दौड़े? आपने कितने पन्ने पढ़े?
+ \"
+प्रति सप्ताह %d बार\"
+ \"
+प्रति माह %d बार\"
+ जैसे व्यायाम
+ रंग
+ जैसे १५
+ जैसे दौड
+ जैसे आज आप कितने मील दौड़े?
+ जैसे मील
+ प्रति माह
+ इसे खाली नहीं रखा जा सकता
+ आज
+ दर्ज करें
+ कोई आदत नहीं मिली
+ कोई मापने योग्य आदत नहीं मिली
+ हां - या - ना में आदत नहीं मिली
+ वृद्धि (Increment)
+ घटौंती
+ दिन छोड़ना सक्षम करें
+ चेकमार्क के बजाय स्किप जोड़ने के लिए दो बार टॉगल करें। स्किप आपके स्कोर को जारी रखते हैं और आपकी स्ट्रीक को नहीं तोड़ते हैं।
+ खोयी जानकारी के लिए प्रश्न चिह्न दिखाएं
+ वास्तविक चूकों और बिना जानकारीवाले दिनों में अंतर करें। चूक दर्ज करने के लिए, दो बार टॉगल करें।
+ अब आप एक विकसक हैं
+ इस कार्रवाई को संभालने के लिए कोई ऐप नहीं मिला
+ मध्यरात्रि से कुछ घंटे बाद तक दिन बढ़ाएँ
+ नया दिन दिखाने के लिए सुबह 3:00 बजे तक प्रतीक्षा करें। उपयोगी अगर आप आमतौर पर आधी रात के बाद सोने जाते हैं। ऐप पुनरारंभ की आवश्यकता होगी।
diff --git a/uhabits-android/src/main/res/values-hr-rHR/strings.xml b/uhabits-android/src/main/res/values-hr-rHR/strings.xml
index 9b75191ab..fab62ad07 100644
--- a/uhabits-android/src/main/res/values-hr-rHR/strings.xml
+++ b/uhabits-android/src/main/res/values-hr-rHR/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Habit Tracker
Navike
Postavke
@@ -30,16 +28,10 @@
Dodaj naviku
Promijeni boju
Navika je stvorena
- Navike su izbrisane
- Navika je promijenjena
- Navike su arhivirane
- Navike su dearhivirane
Pregled
Snaga navike
Povijest
Očisti
- puta u
- dani
Podsjetnik
Spremi
Niz
@@ -50,7 +42,6 @@
Uredi naviku
Potvrdi
Kasnije
-
Dobrodošli
Loop Habit Tracker vam pomaže stvoriti i održavati dobre navike.
Stvorite neke nove navike
@@ -75,8 +66,6 @@
Jeste li znali?
Za razmještanje unosa, pritisnite i držite naziv navike, pa ih premjestite na točno mjesto.
Možete vidjeti više dana prebacivanjem uređaja u vodoravnu orijentaciju.
- Izbriši Navike
- Navike će biti trajno izbrisane. Ova radnja se ne može poništiti.
Navika je izbrisana / nije pronađena
Vikendi
Ponedjeljak do Petak
@@ -110,7 +99,7 @@
Generiraj izvješće o pogreški
Rješavanje problema
Pomozi prevesti ovu aplikaciju
- Noćni način
+ Noćni način
Koristi crnu boju za noćni način
Zamjenjuje sivu pozadinu sa crnom u noćnom načinu. To smanjuje potrošnju bateriju na uređajima s AMOLED zaslonima.
Sučelje
@@ -122,8 +111,6 @@
Četvrtina
Godina
Ukupno
-
-
Svaka %d dana
Svaka %d tjedna
Rezultat
diff --git a/uhabits-android/src/main/res/values-hu-rHU/strings.xml b/uhabits-android/src/main/res/values-hu-rHU/strings.xml
index 5ff950ea2..7cba2c6ed 100644
--- a/uhabits-android/src/main/res/values-hu-rHU/strings.xml
+++ b/uhabits-android/src/main/res/values-hu-rHU/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Szokásrögzítő
Szokások
Beállítások
@@ -28,15 +28,10 @@
Új szokás
Szín módosítása
Szokás létrehozva
- Szokás törölve
- Szokás módosítva
- Szokás archiválva
- Szokás újraaktiválva
Áttekintés
Szokás erőssége
Napló
Törlés
- nap
Emlékeztető
Mentés
Szériák
@@ -64,20 +59,16 @@
Egyedi...
Bejelölés rövid koppintással
Bejelölés koppintással nyomva tartás helyett. Kényelmesebb, de véletlen bejelöléseket okozhat.
- Szundi időtartama emlékeztetőnél
Értékeld az alkalmazást a Google Play-en
Visszajelzés küldése a fejlesztőnek
Forráskód megtekintése a GitHub-on
Linkek
Megnevezés
Beállítások
- Szundi időtartama
Szundi beállítása
Tudtad?
Az elemek újrarendezéséhez a koppints a szokás nevére, majd húzd a megfelelő helyre.
Több nap válik láthatóvá, ha fekvő módba állítod a telefonod kijelzőjét.
- Szokások törlése
- A szokások véglegesen törölve lesznek. A műveletet nem lehet visszavonni.
Szokás törölve / nem található
Hétvégente
Hétfőtől péntekig
@@ -116,7 +107,7 @@
Hibabejelentés generálása
Hibaelhárítás
Segíts lefordítani ezt az alkalmazást
- Éjszakai mód
+ Éjszakai mód
Fekete használata éjszakai módban
A szürke hátteret tiszta feketére cseréli éjszakai módban. Csökkenti az energiafelhasználást AMOLED kijelzős telefonokon.
Kezelőfelület
@@ -175,15 +166,14 @@
(opcionális)
pl. Korán keltél ma fel? Edzettél? Sakkoztál?
Mérhető
- pl. Hány kilométert futottál ma? Hány oldalt olvastál? Hány kalória volt amit ma ettél?
Heti %d alkalommal
Havi %d alkalommal
pl. Edzés
Szín
pl. 15
pl. Futás
- pl. Hány kilométert futottál ma?
- pl. kilométer
+ pl. Hány kilométert futottál ma?
+ pl. kilométer
Minden hónapban
Nem lehet üres
Ma
diff --git a/uhabits-android/src/main/res/values-in-rID/strings.xml b/uhabits-android/src/main/res/values-in-rID/strings.xml
index 7bb1ee792..8a75b12ac 100644
--- a/uhabits-android/src/main/res/values-in-rID/strings.xml
+++ b/uhabits-android/src/main/res/values-in-rID/strings.xml
@@ -130,7 +130,7 @@
Membuat laporan masalah
Troubleshoot
Bantu menerjemahkan aplikasi ini
- Mode malam
+ Mode malam
Gunakan warna hitam pekat pada mode malam
Ganti warna latar abu-abu dengan warna hitam pada mode malam. Mengurangi penggunaan baterai pada layar AMOLED.
Antarmuka
diff --git a/uhabits-android/src/main/res/values-it-rIT/strings.xml b/uhabits-android/src/main/res/values-it-rIT/strings.xml
index 7ee88457d..bf7a45773 100644
--- a/uhabits-android/src/main/res/values-it-rIT/strings.xml
+++ b/uhabits-android/src/main/res/values-it-rIT/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop - Tracciatore di Abitudine
Abitudini
Impostazioni
@@ -28,19 +28,31 @@
Aggiungi abitudine
Cambia colore
Abitudine creata
- Abitudine rimossa
- Abitudine modificata
- Abitudine archiviata
- Abitudine ripristinata
+
+ - Abitudine modificata
+ - Abitudini modificate
+
+
+ - Abitudine eliminata
+ - Abitudini eliminate
+
+
+ - Abitudine archiviata
+ - Abitudini archiviate
+
+
+ - Abitudine non archiviata
+ - Abitudini non archiviate
+
Panoramica
Forza dell\'abitudine
Cronologia
Annulla
- giorni
Promemoria
Salva
Serie
Non hai abitudini attive
+ Hai finito tutto per oggi!
Tieni premuto per completare o annullare
Disabilitato
Crea abitudine
@@ -64,20 +76,24 @@
Personalizza...
Spunta le ripetizioni velocemente
Metti le spunte con un tocco singolo invece che tenendo premuto. Più comodo, ma potrebbe causare delle spunte accidentali.
- Intervallo di ritardo dei promemoria
Valuta quest\'app su Google Play
Manda un feedback allo sviluppatore
Vedi il codice sorgente su GitHub
Links
Nome
Impostazioni
- Snooze
Seleziona ritardo posticipo
Lo sapevi?
Per riordinare le voci, tieni premuto sul nome dell\'abitudine, poi spostala nella posizione corretta.
Puoi vedere più giorni mettendo il tuo telefono orizzontale.
- Elimina abitudine
- L\'abitudine verrà cancellata definitivamente. Non sarà possibile annullare.
+
+ - Eliminare l\'abitudine?
+ - Eliminare le abitudini?
+
+
+ - L\'abitudine verrà eliminata definitivamente. Questa azione non può essere annullata.
+ - Le abitudini verranno eliminate definitivamente. Questa azione non può essere annullata.
+
Abitudine cancellata / non trovata
Weekend
Giorni feriali
@@ -111,7 +127,7 @@
Genera bug report
Risoluzione dei problemi
Aiuta a tradurre questa app
- Modalità notte
+ Modalità notte
Usa nero puro nella modalità notte
Sostituisce gli sfondi grigi con sfondi neri nella modalità notte. Riduce il consumo di batteria nei dispositivi con schermo AMOLED.
Interfaccia
@@ -147,6 +163,7 @@
Per nome
Per colore
Per punteggio
+ Per stato
Esporta
Tieni premuto per cambiare il valore
Cambia valore
@@ -170,16 +187,29 @@
(Opzionale)
ad es. Ti sei svegliato presto oggi? Hai fatto esercizio? Hai giocato a scacchi?
Misurabile
- ad es. Quanti chilometri hai corso oggi? Quante pagine hai letto? Quante calorie hai mangiato?
- %s volte a settimana
+ es. Quanti chilometri hai percorso oggi? Quante pagine hai letto?
+ %d volte a settimana
%d volte al mese
ad es. Esercizio
Colore
ad es. 15
ad es. Correre
- ad es. Quanti chilometri hai corso oggi?
- ad es: Chilometri
+ ad es. Quanti chilometri hai corso oggi?
+ ad es: Chilometri
Ogni mese
Non può essere lasciato vuoto
Oggi
+ Inserisci
+ Nessuna abitudine trovata
+ Nessuna abitudine misurabile trovata
+ Nessuna abitudine sì/no trovata
+ Incremento
+ Decremento
+ Abilita salta giorni
+ Attiva/disattiva due volte per aggiungere un salto invece di una spunta. Un salto mantiene il tuo punteggio invariato e non interrompe il tuo punteggio.
+ Mostra punti interrogativi per i dati mancanti
+ Ora sei uno sviluppatore
+ Nessuna app disponibile per gestire questa azione
+ Prolunga il giorno di alcune ore dopo la mezzanotte
+ Attendere fino alle 3:00 per mostrare il nuovo giorno. Utile se solitamente vai a dormire dopo mezzanotte. È necessario riavviare l\'app.
diff --git a/uhabits-android/src/main/res/values-iw-rIL/strings.xml b/uhabits-android/src/main/res/values-iw-rIL/strings.xml
index ad0d1a9d5..c81a2d15e 100644
--- a/uhabits-android/src/main/res/values-iw-rIL/strings.xml
+++ b/uhabits-android/src/main/res/values-iw-rIL/strings.xml
@@ -1,6 +1,6 @@
-
- Loop Habit Tracker
+
+ Loop למעקב אחר ההרגלים
הרגלים
הגדרות
עריכה
מחיקה
העברה לארכיון
- הוצא מארכיון
+ הוצאה מהארכיון
הרגל חדש
שינוי צבע
- הרגל נוצר
- הרגלים נמחקו
- הרגל השתנה
- הרגלים הועברו לארכיון
- הרגלים הוצאו מארכיון
+ ההרגל נוצר
+
+ - ההרגל השתנה
+ - ההרגלים השתנו
+ - ההרגלים השתנו
+ - ההרגלים השתנו
+
+
+ - ההרגל נמחק
+ - ההרגלים נמחקו
+ - ההרגלים נמחקו
+ - ההרגלים נמחקו
+
+
+ - ההרגל הועבר לארכיון
+ - ההרגלים הועברו לארכיון
+ - ההרגלים הועברו לארכיון
+ - ההרגלים הועברו לארכיון
+
+
+ - ההרגל הוצא מהארכיון
+ - ההרגלים הוצאו מארכיון
+ - ההרגלים הוצאו מארכיון
+ - ההרגלים הוצאו מארכיון
+
סקירה כללית
חוזק ההרגל
היסטוריה
ניקוי
- ימים
תזכורת
שמירה
- רצף
+ רצפים
אין לך הרגלים פעילים
+ סיימת הכול להיום!
לחיצה והחזקה יסמנו או יבטלו את הסימון
כבוי
יצירת הרגל
עריכת הרגל
- בוצע
+ סימון
מאוחר יותר
ברוך בואך
- Loop Habit Tracker מסייע ליצור ולשמר הרגלים טובים.
- ליצור הרגלים חדשים
- בכל יום, אחרי ביצוע ההרגל יש לסמן זאת ביישום.
- מעקב התקדמות
- גרפים מפורטים מציגים כיצד ההרגלים שלך משתפרים לאורך זמן.
+ „Loop למעקב אחר ההרגלים” מסייע לך ביצירה ובשימור הרגלים טובים.
+ יצירת הרגלים חדשים
+ בכל יום, לאחר שביצעת את ההרגל, יש לסמן זאת ביישום.
+ מעקב אחר ההתקדמות
+ גרפים מפורטים מציגים כיצד ההרגלים שלך השתפרו לאורך זמן.
15 דקות
30 דקות
- שעה 1
- 2 שעות
+ שעה
+ שעתיים
4 שעות
8 שעות
24 שעות
תמיד לשאול
התאמה אישית...
סימון הרגלים בלחיצה קצרה
- סמנו יעדים בהקשה קצרה במקום לחיצה ממושכת. נוח יותר, אך יכול להוביל ללחיצות לא מכוונות.
- מרווח נדנוד לתזכורות
+ סימון יעדים בהקשה קצרה במקום בלחיצה ממושכת. זה נוח יותר, אך יכול להוביל לסימוני הרגלים בטעות.
דירוג היישום ב־Google Play
שליחת משוב למפתחים
צפייה בקוד המקור ב־GitHub
קישורים
שם
הגדרות
- זמן בין נדנודים
- הגדר זמן לדחיית תזכורת
+ נא לבחור זמן לדחיית התזכורת
הידעת?
לשינוי סדר ההרגלים, יש ללחוץ לחיצה ארוכה על ההרגל ולגרור אותו למקום הרצוי.
- ניתן לראות ימים נוספים ע\"י סיבוב המסך לתצוגה רוחבית.
- מחיקת הרגלים
- ההרגלים יימחקו לצמיתות. פעולה זו אינה ניתנת לביטול.
- הרגל נמחק / לא נמצא
+ אפשר לראות ימים נוספים בעזרת סיבוב המסך לתצוגה אופקית.
+
+ - למחוק את ההרגל?
+ - למחוק את ההרגלים?
+ - למחוק את ההרגלים?
+ - למחוק את ההרגלים?
+
+
+ - ההרגל יימחק לצמיתות. לא ניתן לבטל פעולה זו.
+ - ההרגלים יימחקו לצמיתות. לא ניתן לבטל פעולה זו.
+ - ההרגלים יימחקו לצמיתות. לא ניתן לבטל פעולה זו.
+ - ההרגלים יימחקו לצמיתות. לא ניתן לבטל פעולה זו.
+
+ ההרגל נמחק / לא נמצא
סופי שבוע
ימי חול
- כל יום בשבוע
+ כל ימות השבוע
בחירת ימים
ייצוא כקובץ CSV
- בוצע
+ סיום
ניקוי
- בחר שעות
- בחר דקות
+ בחירת שעות
+ בחירת דקות
על אודות
- מתרגמים
- מפתחים
+ תרגום
+ פיתוח
גרסה %s
תדירות
סימון הרגל
@@ -98,31 +126,31 @@
כל יום
כל שבוע
עזרה ושאלות נפוצות
- ייצוא נתונים נכשל.
- ייבוא נתונים נכשל.
- קובץ לא מזוהה.
- הרגלים יובאו בהצלחה.
+ ייצוא הנתונים נכשל.
+ ייבוא הנתונים נכשל.
+ הקובץ אינו מזוהה.
+ ההרגלים יובאו בהצלחה.
ייבוא נתונים
ייצוא גיבוי מלא
- תומך בכל הגיבויים שיוצאו ע\"י האפליקציה. כמו גם קבצים שנוצרו ע\"י Tickmate, HabitBull או Rewire. לפרטים נוספים ראו שאלות נפוצות.
- יוצר קבצים שניתן לפתוח על-ידי תוכנות גיליון אלקטרוני כגון Microsoft Excel או OpenOffice. אין אפשרות לייבא את הקובץ בחזרה.
- יוצר קובץ המכיל את כל הנתונים שלך. קובץ זה ניתן לייבא בחזרה.
- הפקת דוח שגיאות נכשלה.
- הפקת דוח שגיאות
+ תומך בכל הגיבויים שיוצאו על ידי היישום, כמו־גם קבצים שנוצרו על ידי Tickmate, HabitBull או Rewire. למידע נוסף נא לעיין בשאלות הנפוצות.
+ ליצירת קבצים שניתן לפתוח באמצעות תוכנת גיליון אלקטרוני כגון Microsoft Exel או OpenOffice Calc. לא ניתן לייבא את נתוני הקובץ בחזרה.
+ ליצירת קובץ שמכיל את כל הנתונים שלך. לא ניתן לייבא את נתוני הקובץ בחזרה.
+ יצירת דו״ח התקלה נכשלה.
+ יצירת דו״ח תקלה
פתרון תקלות
- עזרו לנו לתרגם את האפליקציה
- מצב לילה
- רקע שחור למצב לילה
- החלפת הרקע האפור במצב לילה לשחור מוחלט. מפחית בזבוז סוללה במכשירים עם תצוגת AMOLED.
+ עזרה בתרגום היישום
+ ערכת נושא כהה
+ רקע שחור מוחלט בערכת הנושא הכהה
+ להחלפת הרקע האפור בערכת הנושא הכהה לשחור מוחלט. זה מפחית את צריכת הסוללה במכשירים עם תצוגת AMOLED.
ממשק
- הפיכת סדר הימים
- מציג ימים בסדר הפוך במסך הראשי
+ סדר ימים הפוך
+ הצגת ימים בסדר הפוך במסך הראשי.
יום
שבוע
חודש
רבעון
שנה
- סה\"כ
+ בסך הכול
כן או לא
כל %d ימים
כל %d שבועות
@@ -130,16 +158,16 @@
צליל תזכורת
ללא
סינון
- הסתר יעדים שהושלמו
- הסתר ארכיון
- צור תזכורות \"דביקות\"
- מונע החלקת וביטול תזכורות.
+ הסתרת יעדים שהושגו
+ הסתרת הארכיון
+ יצירת תזכורות נעוצות
+ למניעת התעלמות מתזכורות.
תאורת התראה
- הראה אור מהבהב לתזכורות. זמין רק בטלפונים עם נורות LED להתראות.
- תיקון מסד נתונים
- מאגר נתונים תוקן.
+ להצגת אור מהבהב לתזכורות. זמין רק בטלפונים עם נורות LED להתראות.
+ תיקון מסד הנתונים
+ מסד הנתונים תוקן.
ביטול סימון
- הפעלה \ כיבוי
+ סימון או ביטול הסימון
פעולה
הרגל
מיון
@@ -147,9 +175,10 @@
לפי שם
לפי צבע
לפי ציון
+ לפי מצב
ייצוא
לחיצה והחזקה ישנו את הערך
- שנה ערך
+ שינוי ערך
לוח שנה
יחידה
למשל: האם התעמלת היום?
@@ -157,29 +186,43 @@
יעד
כן
לא
- שנה צליל, רטט, תאורה ושאר הגדרות הקשורות להתראות
- התאם התראות
- הצג מדיניות פרטיות
- הצג את התורמים
+ שינוי הצליל, הרטט, התאורה ושאר הגדרות הקשורות להתראות
+ התאמת ההתראות
+ הצגת מדיניות הפרטיות
+ הצגת כל המתנדבים…
מסד נתונים
- אטימות יישומון
- להפיכת היישומונים שקופים יותר או אטומים יותר במסך הבית שלך.
+ אטימות היישומונים
+ להפיכת היישומונים שקופים או אטומים יותר במסך הבית שלך.
היום הראשון בשבוע
האם השלמת את ההרגל הזה היום?
הערות
(רשות)
- למשל: האם התעוררת מוקדם היום? האם עשית פעילות גופנית? האם שיחקת שחמט?
- ניתנים למדידה
- למשל: כמה קילומטרים רצת היום? כמה עמודים קראת? כמה קלוריות צברת?
+ למשל: האם התעוררת מוקדם היום? האם התעמלת? האם שיחקת שחמט?
+ הרגלים נמדדים
+ למשל: כמה קילומטרים רצת היום? כמה עמודים קראת?
%d פעמים בשבוע
%d פעמים בחודש
- למשל פעילות גופנית
+ למשל: התעמלות
צבע
- למשל 15
- למשל ריצה
- למשל: כמה קילומטרים רצת היום?
- למשל קילומטרים
+ למשל: 15
+ למשל: ריצה
+ למשל: כמה קילומטרים רצת היום?
+ למשל: קילומטרים
כל חודש
- לא יכול להיות ריק
+ חובה לתת שם
היום
+ מילוי
+ לא נמצאו הרגלים
+ לא נמצאו הרגלים נמדדים
+ לא נמצאו הרגלי „כן או לא”
+ עלייה
+ ירידה
+ לאפשר דילוג על ימים
+ סימון כפול כדי לדלג במקום לסמן. הדילוג שומר על הציון שלך ללא שינוי ואינו שובר את הרצף שלך.
+ הצגת סימני שאלה לנתונים חסרים
+ הפרדת הימים ללא הנתונים מהלולאות בפועל. כדי להיכנס ללולאה, יש לסמן פעמיים.
+ מצב הפיתוח הופעל כעת
+ לא נמצא יישום שתומך בפעולה זו
+ הארכת היום בכמה שעות לאחר החצות
+ לחכות עד 3:00 כדי להציג יום חדש. שימושי אם לרוב הולכים לישון לאחר החצות. דורש הפעלה מחדש של היישום.
diff --git a/uhabits-android/src/main/res/values-ja-rJP/strings.xml b/uhabits-android/src/main/res/values-ja-rJP/strings.xml
index 2fd14886e..2debaa378 100644
--- a/uhabits-android/src/main/res/values-ja-rJP/strings.xml
+++ b/uhabits-android/src/main/res/values-ja-rJP/strings.xml
@@ -1,6 +1,6 @@
-
+
ループ習慣トラッカー
習慣
設定
@@ -28,19 +28,24 @@
習慣を追加
色の変更
習慣を作成しました
- 習慣を削除しました
- 習慣を変更しました
- 習慣をアーカイブしました
- 習慣のアーカイブを解除しました
+
+ - 習慣を変更しました
+
+
+ - 習慣を削除しました
+
+
+ - 習慣をアーカイブしました
+
概要
習慣の強さ
履歴
クリア
- 日
リマインダー
保存
連続記録
習慣はありません
+ 今日は終わり!
長押しするとチェックを付けたり外したりできます
オフ
習慣を作成
@@ -64,20 +69,22 @@
カスタム...
タップでチェックをON/OFF
長押しではなくシングルタップでチェックを付けます。より便利ですが、誤って切り替えが起こる可能性があります。
- リマインダーのスヌーズ間隔
Google Play でこのアプリを評価
開発者にフィードバックを送信
GitHub でソースコードを参照
リンク
タイトル
設定
- スヌーズ間隔
スヌーズの遅延時間を設定
ご存知ですか?
エントリーを並べ替えるには、習慣の名前を長押しして、正しい場所にドラッグしてください。
お使いの携帯電話を横置きモードにすることで、より多くの日数を見ることができます。
- 習慣を削除
- 習慣は完全に削除されます。この操作を元に戻すことはできません。
+
+ - 習慣を削除
+
+
+ - 習慣は完全に削除されます。この操作を元に戻すことはできません。
+
習慣が削除されているか、見つかりませんでした
週末
月曜日から金曜日
@@ -111,7 +118,7 @@
バグレポートの作成
トラブルシューティング
このアプリの翻訳を支援する
- ダークテーマ
+ ダークテーマ
ダークテーマで完全な黒を使用する
夜間モードで灰色の背景を完全な黒で置き換えます。AMOLED ディスプレイの電話でバッテリー使用量を抑えます。
インターフェース
@@ -147,6 +154,7 @@
名前で並び替え
色で並び替え
得点で並び替え
+ ステータス順
エクスポート
長押しすると値を変更できます
値を変更する
@@ -170,16 +178,19 @@
(省略可)
例:今日は早く起きましたか?運動しましたか?チェスをしましたか?
数えられるもの
- 例:今日は何km走りましたか? 何ページ本を読みましたか? 何kcal食べましたか?
+ 例:今日は何キロ走ったの?何ページ読んだの?
1 週間に %d 回
1 か月に %d 回
例:運動
色
例:15
例:ランニング
- 例:今日は何km走りましたか?
- 例:km
+ 例:今日は何km走りましたか?
+ 例:km
毎月
空白にはできません
今日
+ 入力
+ 習慣が見つかりませんでした
+ これで開発者になりました!
diff --git a/uhabits-android/src/main/res/values-ko-rKR/strings.xml b/uhabits-android/src/main/res/values-ko-rKR/strings.xml
index 2ddac9155..77a169a99 100644
--- a/uhabits-android/src/main/res/values-ko-rKR/strings.xml
+++ b/uhabits-android/src/main/res/values-ko-rKR/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop 습관제조기
습관
설정
@@ -30,16 +28,10 @@
습관 추가하기
색상 변경
습관이 생성되었습니다.
- 습관이 삭제되었습니다.
- 습관이 수정되었습니다.
- 습관이 보관되었습니다.
- 습관 보관이 해제되었습니다.
- 개요
+ 한눈에 보기
습관 강도
이력
- 지우기
- 번
- 일 동안
+ 취소
알림
저장
연속
@@ -50,7 +42,6 @@
습관 수정하기
완료
나중에
-
환영합니다
Loop은 당신이 좋은 습관을 만들고 유지하도록 도와줍니다.
새로운 습관을 만들어 보세요.
@@ -64,6 +55,8 @@
4시간
8시간
24시간
+ 항상 묻기
+ 사용자 지정.
짧게 눌러서 전환하기
길게 누르고 있는 대신에 짧은 탭 한 번으로 체크합니다. 더 편리하지만, 실수로 전환될 수도 있습니다.
Google Play에서 평가
@@ -72,11 +65,10 @@
링크
제목
설정
+ 일시중지 시간 설정
아시나요?
목록의 순서를 재배치하려면, 습관의 제목을 길게 누르고 다른 위치로 드래그하면 됩니다.
가로 모드에서는 더 많은 날짜를 볼 수 있습니다.
- 습관 삭제
- 습관을 영구적으로 삭제합니다. 이 작업은 취소할 수 없습니다.
습관 삭제 / 찾을 수 없음
주말
주중
@@ -96,7 +88,7 @@
최고 연속 기록
매일
매주
- 도움 & FAQ
+ 도움& FAQ
데이터 내보내기에 실패했습니다.
데이터 가져오기에 실패했습니다.
파일을 인식할 수 없습니다.
@@ -110,7 +102,7 @@
오류보고서 작성하기
문제 해결
이 앱의 번역을 도와주세요
- 야간 모드
+ 야간 모드
야간 모드에서 검정색 사용하기
야간 모드의 회색 배경을 검정색으로 대체합니다. AMOLED 디스플레이를 사용하는 기기에서 배터리 사용량을 감소시킵니다.
인터페이스
@@ -122,8 +114,7 @@
분기
년
전체
-
-
+ 예 또는 아니요
%d일 마다
%d주 마다
점수
@@ -134,6 +125,8 @@
보관된 항목 숨기기
알림 고정하기
알림을 스와이프해서 제거하는 것을 방지합니다.
+ 알림 표시등
+ 리마인더가 있으면알림 표시등이 깜박입니다. LED 알림 표시등이있는 전화기에서만 사용할 수 있습니다.
데이터베이스 복구
데이터베이스가 복구되었습니다.
선택 해제
@@ -146,4 +139,25 @@
색상 순으로
점수 순으로
내보내기
+ 길게 누르면 값이 변경됩니다.
+ 값 변경
+ 캘린더
+ 단위
+ 예 : 오늘 운동을 했습니까?
+ 질문
+ 목표
+ 네
+ 아니요
+ 소리, 진동, 밝기 및 기타 알림 설정
+ 알림 커스터마이징
+ 개인 정보 취급 방침 보기
+ 모든 기여자보기…
+ 데이터베이스
+ 첫번째 요일
+ 오늘 습관을 지키셨나요?
+ 메모
+ (선택사항)
+ 색
+ 매월
+ 오늘
diff --git a/uhabits-android/src/main/res/values-nl-rNL/strings.xml b/uhabits-android/src/main/res/values-nl-rNL/strings.xml
index f899a6007..7d2e8223f 100644
--- a/uhabits-android/src/main/res/values-nl-rNL/strings.xml
+++ b/uhabits-android/src/main/res/values-nl-rNL/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Gewoonte tracker
Gewoontes
Instellingen
@@ -28,19 +28,27 @@
Nieuwe gewoonte
Verander kleur
Gewoonte aangemaakt.
- Gewoontes verwijderd
- Gewoonte gewijzigd.
- Gewoontes gearchiveerd
- Gewoontes hersteld uit archief
+
+ - Gewoonte gewijzigd
+ - Gewoontes gewijzigd
+
+
+ - Gewoontes verwijderd
+ - Gewoontes verwijderd
+
+
+ - Gewoontes gearchiveerd
+ - Gewoontes gearchiveerd
+
Overzicht
Gewoonte-sterkte
Geschiedenis
Wis
- dagen
Herinnering
Opslaan
Reeksen
Je hebt geen actieve gewoontes
+ Je bent klaar voor vandaag!
Houdt ingedrukt om te selecteren of deselecteren
Uit
Gewoonte aanmaken
@@ -64,20 +72,16 @@
Aangepast...
Wijzig herhalingen door kort indrukken
Zet vinkjes met een enkel tikje in plaats van ingedrukt houden. Handiger, maar kan onbedoelde wijzigingen veroorzaken.
- Snooze interval voor herinneringen
Beoordeel deze app in Google Play
Stuur feedback aan de ontwikkelaar
Bekijk de broncode op GitHub
Links
Naam
Instellingen
- Snooze interval
Snooze vertraging selecteren
Wist je dat?
Om de rijen te ordenen, houdt de gewoonte ingedrukt en sleep het naar de gewenste plek.
- Je kunt meer dagen zien door de telefoon in horizontale modus te zetten.
- Verwijder gewoontes
- De gewoontes zullen permanent verwijderd worden. Deze actie kan niet ongedaan gemaakt worden.
+ Je kunt meer dagen zien door de telefoon in landschapsmodus te zetten.
Gewoonte verwijderd / niet gevonden
Weekends
Maandag tot vrijdag
@@ -104,16 +108,16 @@
Gewoontes succesvol geïmporteerd.
Importeer gegevens
Exporteer volledige backup
- Ondersteunt volledige back-ups geëxporteerd door deze app, evenals bestanden die worden gegenereerd door Tickmate, HabitBull of Rewire. Zie FAQ voor meer informatie.
+ Ondersteunt volledige back-ups geëxporteerd door deze app, evenals bestanden die worden gegenereerd door Tickmate, HabitBull of Rewire. Zie de veel gestelde vragen voor meer informatie.
Genereert bestanden die geopend kunnen worden door spreadsheet software zoals Microsoft Excel of OpenOffice Calc. Dit bestand kan niet opnieuw worden geïmporteerd.
Genereert een bestand met al uw gegevens. Dit bestand kan ook terug geïmporteerd worden.
Het genereren van het foutenrapport is mislukt.
Genereer foutenrapport
Probleemoplossing
Help deze app te vertalen
- Nachtmodus
- Gebruik puur zwart bij nachtmodus
- Vervangt grijze achtergronden door puur zwart in nachtmodus. Vermindert batterijgebruik bij telefoons met AMOLED scherm.
+ Nachtmodus
+ Gebruik puur zwart bij het donkere thema
+ Vervangt grijze achtergronden door puur zwart in het donkere thema. Vermindert batterijgebruik bij telefoons met AMOLED scherm.
Interface
Omgekeerde volgorde van dagen
Toon dagen in omgekeerde volgorde op het hoofdscherm
@@ -139,7 +143,7 @@
Database repareren
Database gerepareerd.
Deselecteren
- Omkeren
+ Schakel
Actie
Gewoonte
Sorteren
@@ -147,6 +151,7 @@
Op naam
Op kleur
Op score
+ Per status
Exporteren
Ingedrukt houden om de waarde te wijzigen
Waarde wijzigen
@@ -159,27 +164,41 @@
Nee
Wijzig geluid, trilling, licht en andere instellingen voor meldingen
Meldingen aanpassen
- Bekijk privacybeleid
+ Privacybeleid bekijken
Bekijk alle bijdragers…
Database
Widget doorzichtigheid
- Maakt widgets transparanter of minder doorschijnend op je home screen.
+ Maakt widgets transparanter of minder doorschijnend op je start scherm.
Eerste dag van de week
Heb je deze gewoonte vandaag voltooid?
Notities
(Optioneel)
bijv. Ben je vandaag vroeg wakker geworden? Heb je gesport? Heb je geschaakt?
Meetbaar
- bijv. Hoeveel kilometer heb je vandaag hardgelopen? Hoeveel pagina\'s heb je gelezen? Hoeveel calorieën heb je gegeten?
+ bijv. Hoeveel kilometer heb je vandaag gelopen? Hoeveel pagina\'s heb je gelezen?
%d keer per week
%d keer per maand
bijv. Sporten
Kleur
bijv. 15
bijv. Hardlopen
- bijv. Hoeveel kilometer heb je vandaag hardgelopen?
- bijv. kilometers
+ bijv. Hoeveel kilometer heb je vandaag hardgelopen?
+ bijv. kilometers
Elke maand
Mag niet leeg zijn
Vandaag
+ Voer in
+ Geen gewoontes gevonden
+ Geen meetbare gewoontes gevonden
+ Geen ja-of-nee-gewoontes gevonden
+ Verhogen
+ Verlagen
+ Overgeslagen dagen inschakelen
+ Schakel tweemaal om een overgeslagen dag toe te voegen in plaats van een vinkje. Overgeslagen dagen houden je score ongewijzigd en verbreken je streak niet.
+ Vraagtekens weergeven wanneer gegevens ontbreken
+ Onderscheid dagen zonder gegevens van daadwerkelijke verlopen dagen. Klik twee keer om een verlopen dag in te voeren.
+ Je bent nu een ontwikkelaar!
+ Er is geen app gevonden om deze actie uit te voeren.
+ Verleng de dag tot een paar uur na middernacht
+ Wacht tot 3:00 uur om een nieuwe dag te beginnen. Handig als je normaal gesproken na middernacht gaat slapen. Dit vereist het opnieuw opstarten van de app.
diff --git a/uhabits-android/src/main/res/values-no-rNO/strings.xml b/uhabits-android/src/main/res/values-no-rNO/strings.xml
index 9876174d4..6ed9097fd 100644
--- a/uhabits-android/src/main/res/values-no-rNO/strings.xml
+++ b/uhabits-android/src/main/res/values-no-rNO/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Vaneoversikt
Vaner
Innstillinger
@@ -30,16 +28,10 @@
Legg til vane
Endr farge
Vane laget
- Vaner slettet
- Vane endret
- Vaner arkivert
- Vaner uarkivert
Oversikt
Vanestyrke
Logg
Fjern
- ganger på
- dager
Påminnelse
Lagr
Gjentakelser
@@ -50,7 +42,6 @@
Redigér vane
Sjekk
Senere
-
Velkommen
Loop Vaneoversikt hjelper deg med å lage og beholde gode vaner.
Lag noen nye vaner
@@ -64,6 +55,7 @@
4 timer
8 timer
1 døgn
+ Egendefinert...
Veksl med enkelttrykk
Sett på haker med et enkelttrykk i stedet for å tykke og holde. Mer praktisk, men kan forårsake utilsiktede vekslinger.
Vurdér denne appen på Google Play
@@ -75,8 +67,6 @@
Visste du at?
For å sortere innleggene, trykk og hold på navnet til vanen, deretter dra den til det korrekte stedet.
Du kan se flere dager ved å sette telefonen din i landskapsmodus.
- Slett vaner
- Vanene vil bli slettet permanent. Denne handlingen kan ikke angres.
Vane slettet / ikke funnet
Helger
Hverdager
@@ -110,7 +100,7 @@
Generér feilrapport
Feilsøkning
Hjelp med å oversette denne appen
- Nattmodus
+ Nattmodus
Bruk batterisparing i nattmodus
Bytter ut grå bakgunner med helt svarte i nattmodus. Reduserer betteribruk hos telefoner med AMOLED-skjerm.
Grensesnitt
@@ -122,8 +112,7 @@
Kvarter
År
Totalt
-
-
+ Ja / Nei
Hver %d. dag
Hver %d. uke
Poengsum
@@ -146,4 +135,6 @@
Etter farge
Etter poengsum
Eksportér
+ Endre verdi
+ Spørsmål
diff --git a/uhabits-android/src/main/res/values-pl-rPL/strings.xml b/uhabits-android/src/main/res/values-pl-rPL/strings.xml
index 5c7f8f834..4768592d8 100644
--- a/uhabits-android/src/main/res/values-pl-rPL/strings.xml
+++ b/uhabits-android/src/main/res/values-pl-rPL/strings.xml
@@ -1,6 +1,6 @@
-
+
Śledzenie Nawyków Loop
Nawyki
Ustawienia
@@ -28,19 +28,39 @@
Dodaj nawyk
Zmień kolor
Utworzono nawyk
- Usunięto nawyki
- Zmieniono nawyk
- Nawyki zarchiwizowane
- Nawyki odarchiwizowane
+
+ - Zmieniono nawyk
+ - Zmieniono nawyki
+ - Zmieniono nawyki
+ - Zmieniono nawyki
+
+
+ - Nawyk usunięty
+ - Nawyki usunięte
+ - Nawyki usunięte
+ - Usunięto nawyki
+
+
+ - Zarchiwizowano nawyk
+ - Zarchiwizowano nawyki
+ - Zarchiwizowano nawyki
+ - Zarchiwizowano nawyki
+
+
+ - Nawyk przywrócony z archiwum
+ - Nawyki przywrócone z archiwum
+ - Nawyk przywrócony z archiwum
+ - Nawyki zostały przywrócone z archiwum
+
Przegląd
Siła nawyku
Historia
Wyczyść
- dni
Przypomnienie
Zapisz
Serie
Nie masz aktywnych nawyków
+ Na dziś to wszystko!
Naciśnij i przytrzymaj aby zaznaczyć lub odznaczyć
Wyłączone
Utwórz nawyk
@@ -61,23 +81,31 @@
8 godzin
24 godziny
Zawsze pytaj
- Niestandardowe...
+ Własne ustawienia...
Przełącz powtarzanie krótkim naciśnięciem
Wygodniejsze, ale może spowodować przypadkowe przełączenia.
- Czas drzemki między przypomnieniami
Oceń tę aplikację w Google Play
Prześlij uwagi do programisty
Zobacz kod źródłowy na GitHub\'ie
Linki
Nazwa
Ustawienia
- Czas drzemki
Wybierz długość drzemki
Czy wiesz że?
Aby zmienić kolejność naciśnij i przytrzymaj na nazwie nawyku i przesuń go na odpowiednie miejsce.
Możesz zobaczyć więcej dni trzymając telefon poziomo.
- Usuń nawyki
- Nawyki zostaną trwale usunięte. Tej operacji nie można cofnąć.
+
+ - Usunąć nawyk?
+ - Usunąć nawyki?
+ - Usunąć nawyki?
+ - Usunąć nawyki?
+
+
+ - Nawyk zostanie trwale usunięty. Tej czynności nie można cofnąć.
+ - Nawyki zostaną trwale usunięte. Tej czynności nie można cofnąć.
+ - Nawyki zostaną trwale usunięte. Tej czynności nie można cofnąć.
+ - Nawyki zostaną trwale usunięte. Tej operacji nie można cofnąć.
+
Nawyk usunięty/nie znaleziony
Weekendy
Dni robocze
@@ -111,7 +139,7 @@
Wygeneruj raport o błędach
Rozwiązywanie problemów
Pomóż w tłumaczeniu tej aplikacji
- Tryb nocny
+ Tryb nocny
Używaj pełnej czerni w trybie nocnym
Zamienia szare tła na pełną czerń w trybie nocnym. Zmniejsza zużycie baterii w telefonach z ekranem AMOLED.
Interfejs
@@ -147,12 +175,13 @@
Według nazwy
Według koloru
Według wyniku
+ Według statusu
Eksportuj
Naciśnij i przytrzymaj, aby zmienić wartość
Zmień wartość
Kalendarz
Jednostka
- np, Czy ćwiczyłeś dzisiaj?
+ np. Czy ćwiczyłeś dzisiaj?
Pytanie
Cel
Tak
@@ -170,16 +199,30 @@
(opcjonalne)
np. Czy obudziłeś się dzisiaj wcześnie? Czy ćwiczyłeś? Czy grałeś w szachy?
Mierzalne
- np. Ile kilometrów przejechałeś dzisiaj? Ile stron przeczytałeś? Ile kalorii zjadłeś?
+ np. Ile mil przejechałeś dzisiaj? Ile stron przeczytałeś?
%d razy w tygodniu
%d razy w miesiącu
np. ćwiczenia
Kolor
np. 15
np. Bieg
- np. Ile km przebiegłeś dzisiaj?
- np. kilometry
+ np. Ile km przebiegłeś dzisiaj?
+ np. kilometry
Co miesiąc
Nie może być puste
Dzisiaj
+ Wprowadź
+ Nie znaleziono nawyków
+ Nie znaleziono mierzalnych nawyków
+ Nie znaleziono nawyków typu tak/nie
+ Zwiększ
+ Zmniejsz
+ Włącz pomijanie dni
+ Przełącz dwukrotnie, aby dodać pominięcie zamiast znacznika wyboru. Pomijanie utrzymuje niezmieniony wynik i nie przerywa passy.
+ Pokaż znaki zapytania dla brakujących danych
+ Odróżnij dni bez danych od faktycznych przerw. Aby wprowadzić przerwę, przełącz dwukrotnie.
+ Jesteś teraz programistą
+ Nie znaleziono aplikacji obsługującej to działanie
+ Przedłuż dzień o kilka godzin po północy
+ Poczekaj do 3:00, aby pokazać nowy dzień. Przydatne, jeśli zwykle kładziesz się spać po północy. Wymaga ponownego uruchomienia aplikacji.
diff --git a/uhabits-android/src/main/res/values-pt-rBR/strings.xml b/uhabits-android/src/main/res/values-pt-rBR/strings.xml
index 1874041eb..ae07c2e04 100644
--- a/uhabits-android/src/main/res/values-pt-rBR/strings.xml
+++ b/uhabits-android/src/main/res/values-pt-rBR/strings.xml
@@ -127,7 +127,7 @@
Gerar relatório de erros.
Solução de problemas
Ajude a traduzir este app
- Modo noturno
+ Modo noturno
Usar preto em modo noturno
Substitui os tons de cinza por preto puro em modo noturno. Economiza bateria em telefones com tela AMOLED.
Interface
diff --git a/uhabits-android/src/main/res/values-pt-rPT/strings.xml b/uhabits-android/src/main/res/values-pt-rPT/strings.xml
index 02d8c060f..6d9b58162 100644
--- a/uhabits-android/src/main/res/values-pt-rPT/strings.xml
+++ b/uhabits-android/src/main/res/values-pt-rPT/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop - Acompanhador de Hábitos
Hábitos
Definições
@@ -28,15 +28,10 @@
Adicionar hábito
Alterar a cor
Hábito criado
- Hábito eliminado
- Hábito alterado
- Hábito arquivado
- Hábito desarquivado
Visão geral
Pontuação
Histórico
Limpar
- dias
Lembrete
Guardar
Séries
@@ -64,20 +59,16 @@
Personalizar...
Toque para alternar entre repetições
Mais conveniente, mas pode causar toques acidentais
- Intervalo da opção \'Mais Tarde\' nos lembretes
Avaliar a app no Google Play
Enviar feedback ao programador
Ver código-fonte no GitHub
Hiperligações
Nome
Definições
- Intervalo da opção \'Mais Tarde\'
Definir tempo de suspensão
Sabia que?
Para reorganizar a lista, mantenha pressionado o nome do hábito e arraste-o para o lugar certo.
Pode ver mais dias se utilizar o telemóvel em modo paisagem.
- Apagar hábitos
- Os hábitos serão permanentemente eliminados. Esta ação é irreversível.
Hábito eliminado / não encontrado
Fins de Semana
Segunda a Sexta
@@ -111,7 +102,7 @@
Gerar relatório de erros
Resolução de problemas
Ajude a traduzir esta aplicação
- Modo noturno
+ Modo noturno
Usar preto puro no modo noturno
Substitui os fundos cinzentos por pretos puros no modo noturno. Reduz a utilização da bateria em telemóveis com ecrã AMOLED.
Interface
@@ -170,15 +161,14 @@
(Opcional)
ex. Acordou cedo hoje? Fez exercício? Jogou xadrez?
Mensurável
- ex. Quantos km você correu hoje? Quantas páginas leu? Quantas calorias ingeriu?
%d vezes por semana
%d vezes por mês
ex. Exercício
Cor
ex. 15
ex. Correr
- ex. Quantas km você correu hoje?
- ex. km
+ ex. Quantas km você correu hoje?
+ ex. km
Todos os meses
Não pode ficar em branco
Hoje
diff --git a/uhabits-android/src/main/res/values-ro-rRO/strings.xml b/uhabits-android/src/main/res/values-ro-rRO/strings.xml
index 08ffc5031..d4cc5a3f8 100644
--- a/uhabits-android/src/main/res/values-ro-rRO/strings.xml
+++ b/uhabits-android/src/main/res/values-ro-rRO/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Habit Tracker
Obiceiuri
Setări
@@ -30,16 +28,10 @@
Adaugă un obicei
Schimbă culoarea
Obicei creat.
- Obicei șters.
- Obicei schimbat.
- Obicei arhivat.
- Obicei dezarhivat.
Prezentare generală
Graficul obiceiurilor
Istoric
Golește
- ori în
- zile
Atenționare
Salvează
Zile consecutive
@@ -50,7 +42,6 @@
Editează obiceiul
Bifează
Mai târziu
-
Bine ai venit
Loop Habit Tracker te ajută să creezi și să menții obiceiurile bune.
Creează noi obiceiuri
@@ -64,6 +55,8 @@
4 ore
8 ore
24 de ore
+ Intreaba mereu
+ Diferit...
Comută repetițiile printr-o apăsare scurtă
Mai convenabil, dar poate cauza comutări accidentale.
Evaluează aplicația pe Magazin Play
@@ -72,11 +65,10 @@
Aplicație
Nume
Setări
+ Selectează durata amânării
Știai?
Pentru a rearanja obiceiurile, apasă și ține numele obiceiului, apoi trage-l în locul corect.
Poți vedea mai multe zile în modul peisaj.
- Șterge obiceiurile
- Obiceiurile vor fi șterse permanent. Această acțiune nu este reversibilă.
Obicei șters / negăsit
Weekenduri
Zile de lucru
@@ -110,7 +102,7 @@
Generează raport de erori
Depanare
Ajută la traducerea aplicației
- Mod întunecat
+ Mod întunecat
Utilizează modul întunecat
Înlocuiește fundalurile gri cu negru pur în modul întunecat. Reduce utilizarea bateriei la telefoanele cu ecran AMOLED.
Interfață
@@ -122,8 +114,7 @@
Trimestru
An
Total
-
-
+ Da sau Nu
La fiecare %d zile
La fiecare %d săptămâni
Scor
@@ -134,6 +125,8 @@
Ascunde cele arhivate
Notificări lipicioase
Împiedică eliminarea notificărilor.
+ Lumină de notificare
+ Afișează o lumină intermitentă la notificare. Disponibil doar în telefoanele care au bec LED pentru notificări.
Repară baza de date
Baza de date reparată.
Debifează
@@ -146,4 +139,18 @@
După culoare
După scor
Exportă
+ Ține apăsat pentru a modifica valoarea
+ Modifică valoarea
+ Calendar
+ Unități
+ ex.: Ai îndeplinit exerciții fizice azi?
+ Întrebare
+ Obiectiv
+ Da
+ Nu
+ Schimbați setările de sunet, vibrații, lumină și altele pentru notificări
+ Personalizați notificările
+ Consultați politica de confidențialitate
+ Vizualizați toți colaboratorii…
+ Bază de date
diff --git a/uhabits-android/src/main/res/values-ru-rRU/strings.xml b/uhabits-android/src/main/res/values-ru-rRU/strings.xml
index 38e9e1c2f..c5e0e3583 100644
--- a/uhabits-android/src/main/res/values-ru-rRU/strings.xml
+++ b/uhabits-android/src/main/res/values-ru-rRU/strings.xml
@@ -139,7 +139,7 @@
Сгенерировать отчёт об ошибке
Устранение неполадок
Помогите перевести это приложение
- Ночной режим
+ Ночной режим
Использовать подлинный чёрный в ночном режиме
Заменяет серый фон на подлинный чёрный в ночном режиме. Сокращает расход батареи в телефонах с дисплеем AMOLED.
Интерфейс
diff --git a/uhabits-android/src/main/res/values-sk-rSK/strings.xml b/uhabits-android/src/main/res/values-sk-rSK/strings.xml
index 9977e878e..6bf7b0e50 100644
--- a/uhabits-android/src/main/res/values-sk-rSK/strings.xml
+++ b/uhabits-android/src/main/res/values-sk-rSK/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Habit Tracker
Návyky
Nastavenia
@@ -28,15 +28,10 @@
Pridaj návyk
Zmeniť farbu
Návyk vytvorený
- Návyky zmazané
- Návyk zmenený
- Návyky dosiahnuté
- Návyky nedosiahnuté
Prehľad
Sila návyku
História
Zmazať
- dní
Pripomienka
Uložiť
Série
@@ -64,20 +59,16 @@
Vlastné ...
Prepnúť krátkym stlačením
Pridajte začiarknutie jediným klepnutím namiesto stlačenia a podržania. Je to pohodlnejšie, ale môže dôjsť k náhodným prepnutiam.
- Interval odloženia pripomienok
Ohodnoťte túto aplikáciu na Google Play
Odošlite spätnú väzbu vývojárovi
Zobraziť zdrojový kód na stránke GitHub
Odkazy
Názov
Nastavenia
- Interval odloženia
Nastaviť dĺžku odloženia
Vedeli ste?
Pre zmenu usporiadania záznamov, stlačte a podržte názov návyku a potom ho presuňte na správne miesto.
Môžete vidieť viac dní otočením telefónu do režimu na šírku.
- Zmazať návyky
- Návyky budú natrvalo odstránené. Túto akciu nie je možné vrátiť späť.
Návyk bol odstránený / nenájdený
Víkendy
Od pondelka do piatku
@@ -111,7 +102,7 @@
Vygenerujte hlásenie o chybe
Riešenie problémov
Pomôžte preložiť túto aplikáciu
- Tmavá téma
+ Tmavá téma
Použite čisto čiernu farbu v tmavej téme
Nahrádza sivé pozadie čisto čiernym v tmavej téme. Znižuje spotrebu batérie v telefónoch s displejom AMOLED.
Rozhranie
@@ -170,15 +161,14 @@
(voliteľné)
napr. Zobudili ste sa dnes skoro? Cvičili ste? Hrali ste šach?
Merateľné
- napr. Koľko kilometrov ste dnes zabehli? Koľko stránok ste čítali? Koľko kalórií ste zjedli?
%d krát týždenne
%d krát za mesiac
napr. Cvičenie
Farba
napr. 15
napr. Beh
- napr. Koľko míľ ste dnes prešli?
- napr. míle
+ napr. Koľko míľ ste dnes prešli?
+ napr. míle
Každý mesiac
Nemôže byť prázdne
Dnes
diff --git a/uhabits-android/src/main/res/values-sl-rSI/strings.xml b/uhabits-android/src/main/res/values-sl-rSI/strings.xml
index 68d4b5da0..295c68c85 100644
--- a/uhabits-android/src/main/res/values-sl-rSI/strings.xml
+++ b/uhabits-android/src/main/res/values-sl-rSI/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Sledilnik Navad
Navade
Nastavitve
@@ -30,16 +28,10 @@
Dodaj navado
Spremeni barvo
Navada ustvarjena
- Navada izbrisana
- Navada spremenjena.
- Navada arhivirana.
- Navada dearhivirana.
Pregled
Moč navade
Zgodovina
Počisti
- krat v
- dni
Opomnik
Shrani
Serije
@@ -50,7 +42,6 @@
Spremeni navado
Označi
Kasneje
-
Dobrodošli
Loop Sledilnik Navad vam pomaga ustvariti in vzdrževati dobre navade.
Ustvari nekaj novih navad
@@ -75,8 +66,6 @@
Ali ste vedeli?
Če želite preurediti vnose, pritisnite-in-držite na ime navade, nato pa jo povlecite na željeno mestu.
Ogledate si lahko več dni, s tem da telefon postavite v ležeči načinu.
- Izbriši Navade
- Navade bodo trajno izbrisane. Te operacije ni možno razveljaviti.
Izbrisana navada / ni najdena
Vikendi
Ponedeljek do Petka
@@ -110,7 +99,7 @@
Ustvari poročilo o napakah
Odpravljanje napak
Pomagajte prevesti to aplikacijo
- Nočni način
+ Nočni način
Uporabite popolno črnino v nočnem načinu
Zamenja siva ozadja s popolno črnino v nočnem načinu. Zmanjša porabo baterije na telefonih z AMOLED zasloni.
Vmesnik
@@ -122,8 +111,6 @@
Četrtletje
Leto
Skupaj
-
-
Vsakih %d dni
Vsakih %d tednov
Ocena
diff --git a/uhabits-android/src/main/res/values-sr-rCS/strings.xml b/uhabits-android/src/main/res/values-sr-rCS/strings.xml
index 7543902d6..0c6758362 100644
--- a/uhabits-android/src/main/res/values-sr-rCS/strings.xml
+++ b/uhabits-android/src/main/res/values-sr-rCS/strings.xml
@@ -133,7 +133,7 @@
Napravi izveštaj o grešci
Rešavanje problema
Pomozite prevođenje
- Tamna tema
+ Tamna tema
Čista crna u tamnoj temi
Menja sivu pozadinu sa čistom crnom u tamnoj temi. Smanjuje potrošnju baterije kod telefona sa AMOLED ekranom.
Sučelje
diff --git a/uhabits-android/src/main/res/values-sr-rSP/strings.xml b/uhabits-android/src/main/res/values-sr-rSP/strings.xml
index 2cd879630..95e931888 100644
--- a/uhabits-android/src/main/res/values-sr-rSP/strings.xml
+++ b/uhabits-android/src/main/res/values-sr-rSP/strings.xml
@@ -107,7 +107,7 @@
Избор дана
Извези као CSV
Завршено
- Очисти
+ Обриши
Избор часова
Избор минута
О програму
@@ -133,7 +133,7 @@
Направи извештај о грешци
Решавање проблема
Помозите превођење
- Тамна тема
+ Тамна тема
Чиста црна у тамној теми
Мења сиву позадину са чистом црном у тамној теми. Смањује потрошњу батерије код телефона са АМОЛЕД екраном.
Сучеље
diff --git a/uhabits-android/src/main/res/values-sv-rSE/strings.xml b/uhabits-android/src/main/res/values-sv-rSE/strings.xml
index 39ac2dad0..e0586ca77 100644
--- a/uhabits-android/src/main/res/values-sv-rSE/strings.xml
+++ b/uhabits-android/src/main/res/values-sv-rSE/strings.xml
@@ -136,7 +136,7 @@
Generera felrapport
Felsökning
Hjälp till att översätta appen
- Nattläge
+ Nattläge
Använd svart färg i nattläge
Ersätter gråa bakgrunder med svart färg i nattläge. Reducerar batterianvändningen för telefoner med AMOLED-skärm.
Gränssnitt
diff --git a/uhabits-android/src/main/res/values-ta-rIN/strings.xml b/uhabits-android/src/main/res/values-ta-rIN/strings.xml
index b232333c2..d8ecdd40c 100644
--- a/uhabits-android/src/main/res/values-ta-rIN/strings.xml
+++ b/uhabits-android/src/main/res/values-ta-rIN/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
Loop Habit Tracker
பழக்கங்கள்
அமைப்புகள்
@@ -30,16 +28,10 @@
சேர்க்க
நிறம் மாற்ற
பழக்கம் உருவாக்கப்பட்டது
- பழக்கம் நீக்கப்பட்டது
- பழக்கம் மாற்றப்பட்டது
- காப்பகப்படுத்தியப் பழக்கம்
- பழக்கங்கள் ஆவண காப்பகத்தில் இருந்து நீக்கப் பட்டது
மேற்பார்வை
பழக்கத்தின் வலிமை
வரலாறு
அழி
- காலங்களில்
- நாட்கள்
நினைவூட்டல்கள்
சேமிக்கவும்
சாதனைகள்
@@ -50,7 +42,6 @@
பழக்கத்தை திருத்த
சரிப்பார்ப்பு குறி
பிறகு
-
வருக
இந்த செயலி நல்ல பழக்க வழக்கங்களை துவங்க மற்றும் தொடர உதவுகிறது.
சில புது பழக்கங்களை துவங்கவும்!
@@ -64,6 +55,7 @@
4 மணி நேரம்
8 மணி நேரம்
24 மணி நேரம்
+ எப்போதும் கேள்
சிறிய அழுத்தலின் மூலம் தாவு
சரிப் பார்ப்பு குறி யை இட அழுத்தி பிடிப்பதற்கு பதில் ஒரு முறை தட்டலாம். இது முன்னதை விட எளிமையானது. ஆனால் இது தற்செயலான தாவல்களுக்கு வழி வகுக்கும்.
Google Play-ல் இந்த செயலியை மதிப்பிட
@@ -75,8 +67,6 @@
உங்களுக்கு தெரியுமா?
பதிவுகளை மறுசீரைமக்க, தேவையான பழக்க பதிவின் மீது அழுத்தி பிடித்து பின் தேவையான இடத்திற்கு அதை இழுக்கவும்.
உங்கள் கைப்பேசியை அகலவாக்கில் வைக்கும்போது இன்னும் அதிக நாட்களை காண முடியும்.
- பழக்கங்களை நீக்கவும்
- பழக்கங்கள் நிரந்தரமாக நீக்கப்படும். இந்த செயலை மீட்டமைக்க இயலாது.
பழக்கம் நீக்கப்பட்டுவிட்டது / காணவில்லை
வார இறுதிகள்
திங்கள் முதல் வெள்ளி வரை
@@ -110,7 +100,7 @@
பிழை அறிக்கை உருவாக்கு
பழுது இடமறிதல்
இந்த செயலியை மற்ற மொழிகளில் மொழிபெயர்க்க உதவி செய்யவும்
- இருள் வண்ண பாங்கு
+ இருள் வண்ண பாங்கு
இருள் பாங்கில் முழு கருப்பு நிறத்தை பயண்படுத்து
இதன் மூலம் செயலியில் உள்ள பழுப்பு பின்புலங்கள் நீக்கப்பட்டு முழுவதும் கருப்பு நிற பின்புலங்களாக மாற்றப்படும். இது AMOLED திரை கொண்ட கைப்பேசிகளில் மின்கல பயன்பாட்டை குறைக்கும்.
இடைமுகம்
@@ -122,8 +112,7 @@
காற் பங்கு
வருடம்
மொத்தம்
-
-
+ நீங்கள் செய்தீர்களா அல்லது செய்யவில்லை
ஓவ்வொரு %d நாளும்
ஒவ்வொரு %d வாரங்களும்
மதிப்பெண்கள்
diff --git a/uhabits-android/src/main/res/values-te-rIN/strings.xml b/uhabits-android/src/main/res/values-te-rIN/strings.xml
index a54847b17..60fab75e4 100644
--- a/uhabits-android/src/main/res/values-te-rIN/strings.xml
+++ b/uhabits-android/src/main/res/values-te-rIN/strings.xml
@@ -17,10 +17,38 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
-
-
-
+
+ అలవాట్లు
+ సెట్టింగులు
+ మార్చు
+ తొలగించు
+ ఆర్కైవ్ చేయి
+ అలవాటు జోడించండి
+ రంగు మార్చండి
+ అలవాటు సృష్టించబడింది
+ అవలోకనం
+ చరిత్ర
+ తొలగించుము
+ జ్ఞాపిక
+ సేవ్
+ మీకు క్రియాశీలమైన అలవాట్లు లేవు
+ అలవాటు సృష్టించండి
+ అలవాటును సవరించండి
+ తనిఖీ చేయి
+ తరువాత
+ స్వాగతం
+ లూప్ అలవాటు ట్రాకర్ మంచి అలవాట్లను సృష్టించడానికి మరియు నిర్వహించడానికి మీకు సహాయపడుతుంది.
+ కొన్ని కొత్త అలవాట్లను సృష్టించండి
+ ప్రతి రోజు, మీ అలవాటు చేసిన తర్వాత, అనువర్తనంలో చెక్మార్క్ ఉంచండి.
+ కాలక్రమేణా మీ అలవాట్లు ఎలా మెరుగుపడ్డాయో వివరణాత్మక గ్రాఫ్లు మీకు చూపుతాయి.
+ 15 నిమిషాలు
+ 30 నిమిషాలు
+ 1 గంట
+ 2 గంటలు
+ 4 గంటలు
+ 8 గంటలు
+ 24 గంటలు
+ ఎల్లప్పుడూ అడుగు
+ సెట్టింగులు
+ తొలగించుము
diff --git a/uhabits-android/src/main/res/values-tr-rTR/strings.xml b/uhabits-android/src/main/res/values-tr-rTR/strings.xml
index a131baa40..cc63aeba7 100644
--- a/uhabits-android/src/main/res/values-tr-rTR/strings.xml
+++ b/uhabits-android/src/main/res/values-tr-rTR/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop Alışkanlık Takibi
Alışkanlıklar
Ayarlar
@@ -28,15 +28,26 @@
Alışkanlık ekle
Renk Değiştir
Alışkanlık oluşturuldu.
- Alışkanlık silindi.
- Alışkanlık değiştirildi
- Alışkanlık arşivlendi.
- Alışkanlık arşivden çıkarıldı.
+
+ - Alışkanlık değiştirildi
+ - Alışkanlıklar değiştirildi
+
+
+ - Alışkanlık silindi
+ - Alışkanlıklar silindi
+
+
+ - Alışkanlık arşivlendi
+ - Alışkanlıklar arşivlendi
+
+
+ - Alışkanlık arşivden çıkarıldı
+ - Alışkanlıklar arşivden çıkarıldı
+
Genel Bakış
Alışkanlık gücü
Geçmiş
Temizle
- gün
Hatırlatma
Kaydet
Seriler
@@ -45,11 +56,11 @@
Kapalı
Alışkanlık oluştur
Alışkanlık düzenle
- Yaptım
+ İşaretle
Sonra
Hoşgeldin
Loop Alışkanlık Takibi, iyi alışkanlıklar edinmene ve sürdürmene yardımcı olur.
- Yeni alışkanlıklar oluştur
+ Yeni alışkanlıklar oluşturun
Alışkanlığınızı gerçekleştirdikten sonra her gün uygulamada yapıldı işareti koyun.
Gelişimini izle
Detaylı grafiklerle, zaman içinde alışkanlıklarının nasıl geliştiğini gör.
@@ -64,20 +75,20 @@
Özel...
Tek dokunuşla işaretle veya işareti kaldır
Alışkanlıklarınızı, uzun dokunuş yerine tek dokunuşla işaretlemenizi sağlar. Kullanımı daha kolaydır ancak hatalı olarak işaretleme yapılmasına neden olabilir.
- Hatırlatmalardaki erteleme süresi
Google Play\'de uygulamayı oyla
Geliştiriciye geri bildirim gönder
Github\'da kaynak kodunu gör
Bağlantılar
Ad
Ayarlar
- Erteleme süresi
Erteleme süresini ayarla
Biliyor muydun?
Girdileri sıralamak için, alışkanlık adının üstüne basılı tut ve doğru yere sürükle.
- Cihazını yatay tutarak daha fazla gün görebilirsin.
- Alışkanlıkları Sil
- Alışkanlıklar kalıcı olarak silinecek. Bu eylem geri alınamaz.
+ Cihazınızı yatay tutarak daha fazla gün görüntüleyebilirsiniz.
+
+ - Alışkanlık silinsin mi?
+ - Alışkanlıklar silinsin mi?
+
Alışkanlık silinmiş ya da bulunamadı
Hafta sonları
Pazartesinden Cumaya
@@ -108,12 +119,12 @@
Üretilen dosyalar, Microsoft Excel veya OpenOffice Calc. gibi hesap taplosu uygulamaları ile açılabilir. Bu dosya yeniden içeri aktarılamaz.
Tüm verilerini içeren bir dosya üretir. Bu dosya yeniden içeri aktarılabilir.
Hata raporu oluşturulamadı.
- Hata raporu üret
+ Hata raporu oluştur
Sorun Giderme
Bu uygulamanın çevirisine yardım et
- Gece kipi
- Gece kipinde saf siyah kullan
- Gece kipinde gri arkaplanını, saf siyah ile değiştir. AMOLED ekranlı cihazlarda pil kullanımını azaltabilir.
+ Gece modu
+ Gece modunda saf siyah kullan
+ Gece modunda gri arkaplanı saf siyah ile değiştirir. AMOLED ekranlı cihazlarda pil kullanımını azaltır.
Arayüz
Günleri ters sırala
Ana ekranda günleri tersten göster
@@ -170,15 +181,14 @@
(Tercihe bağlı)
Örneğin, Bugün erken uyandın mı? Spor yaptın mı? Satranç oynadın mı?
Ölçülebilir
- Örneğin, Bugün kaç km. koştunuz? Kaç sayfa kitap okudunuz? Kaç kalorilik yemek yediniz?
Haftada %d kez
Ayda %d kez
Örneğin, Spor
Renk
Ör. 15
Örneğin, Koşu
- Örneğin, Bugün kaç km. koştunuz?
- Örneğin, Km.
+ Örneğin, Bugün kaç km. koştunuz?
+ Örneğin, Km.
Her ay
Boş bırakılamaz
Bugün
diff --git a/uhabits-android/src/main/res/values-ug-rCN/strings.xml b/uhabits-android/src/main/res/values-ug-rCN/strings.xml
index dcc3da83d..88cdb3db8 100644
--- a/uhabits-android/src/main/res/values-ug-rCN/strings.xml
+++ b/uhabits-android/src/main/res/values-ug-rCN/strings.xml
@@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see .
-->
-
-
-
+
ئادەت
تەڭشەك
تەھرىرلەش
@@ -29,10 +27,5 @@
ئادەت قېتىلدى
رەڭ ئۆزگەردى
ئادەت قۇرۇلدى
- ئادەت ئۆچۈرۈلدى
- ئادەت ئۆزگەرتىلدى
-
تەڭشەك
-
-
diff --git a/uhabits-android/src/main/res/values-uk-rUA/strings.xml b/uhabits-android/src/main/res/values-uk-rUA/strings.xml
index dbf8eb904..e33911ce0 100644
--- a/uhabits-android/src/main/res/values-uk-rUA/strings.xml
+++ b/uhabits-android/src/main/res/values-uk-rUA/strings.xml
@@ -148,7 +148,7 @@
Створити звіт про помилку
Усунення несправностей
Допоможіть перекласти цю програму
- Нічний режим
+ Нічний режим
Користати цілком чорне тло у нічному режимі
Замінює сіре тло на цілком чорне у нічному режимі. Зменшує використання батареї в телефонах із дисплеєм AMOLED.
Оболонка
diff --git a/uhabits-android/src/main/res/values-vi-rVN/strings.xml b/uhabits-android/src/main/res/values-vi-rVN/strings.xml
index 0371155aa..82006cd8f 100644
--- a/uhabits-android/src/main/res/values-vi-rVN/strings.xml
+++ b/uhabits-android/src/main/res/values-vi-rVN/strings.xml
@@ -1,6 +1,6 @@
-
+
Trình theo dõi thói quen Loop
Thói quen
Cài đặt
@@ -28,19 +28,27 @@
Thêm thói quen
Thay đổi màu sắc
Thói quen đã được tạo
- Thói quen đã bị xóa
- Thói quen đã được thay đổi
- Thói quen đã được lưu trữ
- Thói quen đã bị huỷ lưu trữ
+
+ - Thói quen đã được thay đổi
+
+
+ - Thói quen đã bị xóa
+
+
+ - Thói quen đã được lưu trữ
+
+
+ - Thói quen đã bị huỷ lưu trữ
+
Tổng quan
Độ mạnh của thói quen
Lịch sử
Xoá
- ngày
Nhắc nhở
Lưu
Mức độ
Bạn có không có thói quen nào đang hoạt động
+ Bạn đã xong tất cả cho ngày hôm nay!
Nhấn giữ để đánh dấu hoặc bỏ đánh dấu
Tắt
Tạo thói quen
@@ -64,20 +72,22 @@
Tùy chỉnh...
Bấm nhanh để chuyển trạng thái
Chỉ cần chạm một lần để đánh dấu thay cho việc nhấn giữ. Tiện lợi hơn nhưng có thể đánh dấu sai.
- Khoảng thời gian báo lại lời nhắc
Đánh giá ứng dụng trên Google Play
Gửi phản hồi cho nhà phát triển
Xem mã nguồn trên Github
Liên kết
Tên
Cài đặt
- Khoảng thời gian tạm dừng
Chọn độ trễ báo lại
- Bạn đã biết?
+ Bạn có biết?
Để sắp xếp lại các mục, nhấn giữ tên thói quen, sau đó kéo tới vị trí chính xác.
Bạn có thể xoay ngang điện thoại để xem được nhiều ngày hơn.
- Xoá bỏ thói quen
- Thói quen sẽ bị xoá vĩnh viễn. Hành động này không thể khôi phục.
+
+ - Xoá thói quen?
+
+
+ - Thói quen sẽ bị xoá vĩnh viễn. Hành động này không thể được hoàn tác.
+
Thói quen đã bị xoá hoặc không tìm thấy
Cuối tuần
Thứ hai đến thứ sáu
@@ -94,24 +104,24 @@
Phiên bản %s
Tần suất
Đánh dấu
- Duy trì lâu nhất
+ Chuỗi dài nhất
Hàng ngày
Hàng tuần
Trợ giúp & Câu hỏi
Xuất dữ liệu thất bại.
Nhập dữ liệu thất bại.
- Không xác nhận được file.
+ Không nhận ra được tệp.
Thói quen được nhập thành công.
Nhập dữ liệu
- Xuất toàn bộ sao lưu
+ Xuất bản sao lưu đầy đủ
Hỗ trợ các bản sao lưu đầy đủ được xuất ra bởi ứng dụng, cũng như các file được tạo bởi Tickmate, HabitBull hoặc Rewire. Xem FAQ để biết thêm thông tin.
- Các file tạo ra có thể mở bằng các phần mềm bảng tính như Microsoft Excel hoặc OpenOffice Calc. Nhưng file này không thể nhập lại.
+ Tạo ra các tệp có thể được mở bằng các phần mềm bảng tính như Microsoft Excel hoặc OpenOffice Calc. Tệp này không thể được nhập lại.
Tạo ra một tệp chứa tất cả dữ liệu của bạn. Tệp này có thể nhập lại.
Tạo báo cáo về lỗi.
Tạo báo cáo lỗi
Xử lí sự cố
Giúp dịch ứng dụng
- Chế độ ban đêm
+ Chế độ ban đêm
Sử dụng màu đen thuần trong chế độ ban đêm
Thay thế nền màu xám bởi màu đen thuần trong chế độ ban đêm. Giảm thiểu việc sử dụng pin của điện thoại có màn hình AMOLED.
Giao diện
@@ -147,6 +157,7 @@
Theo tên
Theo màu sắc
Theo điểm số
+ Theo trạng thái
Xuất dữ liệu ra
Nhấn và giữ để thay đổi giá trị
Thay đổi giá trị
@@ -170,16 +181,30 @@
(Không bắt buộc)
Ví dụ: Hôm nay bạn có dậy sớm không? Bạn có tập thể dục? Bạn có chơi cờ vua không?
Có thể đo lường
- Ví dụ như bạn chạy bao nhiêu dặm ngày hôm nay? Bạn đã đọc bao nhiêu trang sách? Bạn đã ăn bao nhiêu calo?
+ Ví dụ: Hôm nay bạn đã chạy bao nhiêu dặm? Bạn đã đọc bao nhiêu trang?
%d lần mỗi tuần
%d lần mỗi tháng
Ví dụ: Tập thể dục
Màu sắc
Ví dụ: 15
Ví dụ: Chạy
- Ví dụ: Bao nhiêu dặm bạn đã chạy ngày hôm nay?
- Ví dụ: Dặm
+ Ví dụ: Bao nhiêu dặm bạn đã chạy ngày hôm nay?
+ Ví dụ: Dặm
Hàng tháng
Không thể để trống
Hôm nay
+ Nhập
+ Không tìm thấy thói quen nào
+ Không tìm thấy thói quen có thể đo lường nào
+ Không tìm thấy thói quen có hoặc không nào
+ Tăng lên
+ Giảm xuống
+ Bật bỏ qua ngày
+ Bật/tắt hai lần để thêm một lần bỏ qua thay vì dấu kiểm. Bỏ qua giữ cho số điểm của bạn không thay đổi và không phá vỡ chuỗi của bạn.
+ Hiện dấu hỏi cho dữ liệu bị thiếu
+ Phân biệt những ngày không có dữ liệu với những lần trôi đi thực tế. Để nhập một lần trôi đi, hãy bật/tắt hai lần.
+ Bạn đã là nhà phát triển
+ Không tìm thấy ứng dụng nào để hỗ trợ hành động này
+ Kéo dài ngày thêm một vài giờ sau nửa đêm
+ Chờ đến 3:00 sáng để hiện một ngày mới. Rất hữu ích nếu bạn thường đi ngủ sau nửa đêm. Yêu cầu khởi động lại ứng dụng.
diff --git a/uhabits-android/src/main/res/values-zh-rCN/strings.xml b/uhabits-android/src/main/res/values-zh-rCN/strings.xml
index d53511e00..dd2e70d2c 100644
--- a/uhabits-android/src/main/res/values-zh-rCN/strings.xml
+++ b/uhabits-android/src/main/res/values-zh-rCN/strings.xml
@@ -38,7 +38,7 @@
- 习惯已存档
- - 已对习惯进行了取消存档操作
+ - 习惯已取消存档
总览
习惯强度
@@ -48,7 +48,7 @@
保存
连续完成次数
你还没有任何习惯
- 你今天的工作完成了!
+ 你已经完成了今天所有的习惯!
长按 标记/取消标记
关闭
新建习惯
@@ -70,7 +70,7 @@
24 小时
总是询问
自定义
- 轻触以启动重复
+ 短按切换
更加方便,但有可能造成意外记录
去 Play 商店评价这个应用
发送反馈给开发者
@@ -121,9 +121,9 @@
生成错误报告
故障排除
帮助翻译这个应用
- 夜间模式
- 在夜间模式中使用纯黑色
- 以纯黑色背景代替夜间模式中的灰色背景。
+ 深色主题
+ 在深色主题中使用纯黑色
+ 以纯黑色背景代替深色主题中的灰色背景。
这可以降低 AMOLED 屏幕手机的耗电量。
界面
反向顺序的日子
@@ -134,19 +134,19 @@
季度
年
总数
- 是或否
+ 完成与否
每 %d 天
每 %d 周
成绩
提醒声音
无
筛选
- 隐藏已完成项目
+ 隐藏已完成
隐藏已存档
使提醒持久
防止提醒被滑掉
- 提示灯
- 仅有 LED 提示灯的手机才有闪烁提醒。
+ 通知指示灯
+ 通过闪烁指示灯来提醒。仅限于有 LED 通知指示灯的手机。
修复数据库
数据库已修复
取消选中
@@ -175,11 +175,11 @@
查看所有贡献者
数据库
微件不透明度
- 使微件在主屏幕上更加透明或更加不透明。
- 一周的起始日
- 你今天养成这个习惯了吗?
+ 调整主屏幕上微件的不透明度
+ 一周的第一天
+ 你今天完成这个习惯了吗?
备注
- (可选)
+ (选填)
例如:你今天早起了吗?你锻炼了吗?你下棋了吗?
可量化的
例如:今天你跑了几公里?你阅读了几页书?
@@ -206,6 +206,6 @@
区分没有数据和实际犯错的日子。要输一个过失,请切换两次。
你现在是一个开发者!
找不到支持此操作的应用
- 将一天延长到午夜过后几个小时
- 等到凌晨3点再展现新的一天。如果你通常在午夜后入睡,这很有用。需要重新启动应用程序。
+ 将一天延长到午夜后的几个小时
+ 凌晨 3 点后再显示新的一天。如果你通常在午夜后入睡,这会很有用。重启应用后生效。
diff --git a/uhabits-android/src/main/res/values-zh-rTW/strings.xml b/uhabits-android/src/main/res/values-zh-rTW/strings.xml
index e952075a4..30f5bf5e4 100644
--- a/uhabits-android/src/main/res/values-zh-rTW/strings.xml
+++ b/uhabits-android/src/main/res/values-zh-rTW/strings.xml
@@ -1,6 +1,6 @@
-
+
Loop 習以為常
習慣
偏好設定
@@ -28,19 +28,27 @@
加入新習慣
選擇顏色
習慣已增加
- 習慣已刪除
- 習慣已經被修改
- 習慣已封存
- 習慣已取消封存
+
+ - 習慣更改完成
+
+
+ - 習慣已刪除
+
+
+ - 習慣已封存
+
+
+ - 習慣已取消封存
+
總覽
習慣強度
歴史紀錄
清空
- 日
提醒
儲存
記錄
你還沒有建立任何習慣
+ 今天預定的任務已全數完成!
請以長按來標記或取消標記
關閉
新增習慣
@@ -64,20 +72,22 @@
自訂
換成輕碰來記錄習慣
雖然更方便,但有可能變成不小心就點到
- 延後提醒的間隔
在 Google Play 上評價這個 App
傳送改進意見給開發者
在 GitHub 上查看原始碼
連結
習慣名稱
偏好設定
- 延後時間間隔
選擇延後通知
你知道嗎?
如果要重新排列習慣,可以將其拖曳到理想的位置
把手機橫放可以看到更多天數
- 刪除習慣
- 此習慣會被永久刪除,而且無法復原
+
+ - 你確定要刪除習慣?
+
+
+ - 此習慣會被永久刪除,而且無法復原
+
習慣已刪除 / 搜尋不到
週末
工作日
@@ -115,7 +125,7 @@
製作錯誤報告
問題排除
協助翻譯本程式
- 夜間模式
+ 夜間模式
在夜間模式中使用深色設定
在夜間模式中,使用黑色背景取代灰色背景。這樣可以減少 AMOLED 螢幕手機的電量消耗。
介面
@@ -151,6 +161,7 @@
根據名稱
根據顏色
根據分數
+ 依據狀態
匯出
持續按住來改換數值
更改數值
@@ -173,17 +184,31 @@
備註
(非必要的)
例如: 你今天有早起嗎?你有運動嗎?你有下棋嗎?
- 可測量進度
- 例如:你今天跑了幾英里?你閱讀了幾頁?你吃了多少卡路里?
+ 可量化的
+ 例如:今天你跑了幾英哩?你讀了幾頁書?
每周 %d 次
每月 %d 次
例如:運動
顏色
例如:15
例如:跑步
- 例如:你今天跑了幾英里?
- 例如:英里
+ 例如:你今天跑了幾英里?
+ 例如:英里
每個月
必填
今天
+ 輸入
+ 找不到任何習慣
+ 找不到可衡量的習慣
+ 找不到是非題的習慣
+ 遞增
+ 遞减
+ 啟用跳過天數功能
+ 切換兩次、設定跳過,以取代完成標記。跳過功能將維持你的分數不變,不打破你的連續紀錄。
+ 在資料缺漏處顯示問號
+ 將沒有數據的天數與逾期者分開。要更改逾期設定,請切換兩次。
+ 你現在已成為開發人員!
+ 找不到可以處理這個動作的應用程式。
+ 將一天延長到午夜過後幾個小時
+ 凌晨3點後再顯示新的一天。如果你通常在午夜以後才睡,這能幫上忙。重新啟動後才生效。
diff --git a/uhabits-android/src/main/res/values/strings.xml b/uhabits-android/src/main/res/values/strings.xml
index 71400de62..cf441e983 100644
--- a/uhabits-android/src/main/res/values/strings.xml
+++ b/uhabits-android/src/main/res/values/strings.xml
@@ -161,6 +161,7 @@
None
Filter
Hide completed
+ Hide entered
Hide archived
Make notifications sticky
Prevents notifications from being swiped away.
diff --git a/uhabits-android/src/main/res/values/styles.xml b/uhabits-android/src/main/res/values/styles.xml
index 2f8eb6e21..9bba46775 100644
--- a/uhabits-android/src/main/res/values/styles.xml
+++ b/uhabits-android/src/main/res/values/styles.xml
@@ -129,6 +129,7 @@
- @drawable/selected_box
- @color/grey_100
- @color/black
+ - @style/PreferenceThemeOverlay.v14.Material.PureBlack
+
+
+