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.

Get it on Google Play - Get it on F-Droid + Get it on F-Droid

## 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 + + +