Merge branch 'dev' into feature/sync

feature/sync
Alinson S. Xavier 4 years ago
commit e8a4a9740e
No known key found for this signature in database
GPG Key ID: DCA0DAD4D2F58624

@ -6,11 +6,16 @@ labels: ''
assignees: '' assignees: ''
--- ---
<!--
Please use the template below for your bug report. Issues that do not follow this
template, or that do not contain all necessary information (namely, description of
the problem, steps to reproduce, phone, phone operating system, and app version)
will be closed without further consideration.
-->
## Pre-submission checklist ## Pre-submission checklist
- [ ] I am submitting a bug report, not a feature request. - [ ] I am submitting a bug report, not a feature request.
- [ ] I am running the latest version of Loop Habit Tracker. - [ ] I have searched for similar issues, but did not find any matches.
- [ ] I have have searched for similar issues, but did not find any matches.
## Description ## Description
A clear and concise description of what the problem is. 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 .... 3. Scroll down to ....
4. See error 4. See error
## Screenshots
If applicable, add screenshots to help explain your problem.
## System information ## System information
- Phone: [e.g. Google Pixel 4] - Phone: [e.g. Google Pixel 4]
- Phone Operating System: [e.g. Android 10] - 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.

@ -3,4 +3,4 @@ updates:
- package-ecosystem: "gradle" - package-ecosystem: "gradle"
directory: "/" directory: "/"
schedule: schedule:
interval: "daily" interval: "monthly"

@ -30,7 +30,7 @@ jobs:
AndroidTest: AndroidTest:
needs: Build needs: Build
runs-on: macOS-10.15 runs-on: macOS-10.15
timeout-minutes: 45 timeout-minutes: 60
strategy: strategy:
matrix: matrix:
api: [ api: [
@ -56,7 +56,9 @@ jobs:
path: uhabits-android/build/outputs/ path: uhabits-android/build/outputs/
- name: Install flock - 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 - name: Run Android Tests
run: ./build.sh android-tests ${{ matrix.api }} run: ./build.sh android-tests ${{ matrix.api }}

@ -1,5 +1,28 @@
# Changelog # 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 ## [2.0.1] - 2021-05-09
### Added ### Added

@ -18,7 +18,7 @@ source.
<p align="center"> <p align="center">
<a href="https://play.google.com/store/apps/details?id=org.isoron.uhabits&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-AC-global-none-all-co-pr-py-PartBadges-Oct1515-1"><img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/images/apps/en-play-badge-border.png" height="75px"/></a> <a href="https://play.google.com/store/apps/details?id=org.isoron.uhabits&utm_source=global_co&utm_medium=prtnr&utm_content=Mar2515&utm_campaign=PartBadge&pcampaignid=MKT-AC-global-none-all-co-pr-py-PartBadges-Oct1515-1"><img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/images/apps/en-play-badge-border.png" height="75px"/></a>
<a href="http://f-droid.org/app/org.isoron.uhabits"><img alt="Get it on F-Droid" src="http://i.imgur.com/baSPE7X.png" height="75px"/></a> <a href="https://f-droid.org/app/org.isoron.uhabits"><img alt="Get it on F-Droid" src="https://i.imgur.com/baSPE7X.png" height="75px"/></a>
</p> </p>
## Screenshots ## Screenshots
@ -109,7 +109,7 @@ contribute, even if you are not a software developer.
more details. more details.
You should have received a copy of the GNU General Public License along You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>. with this program. If not, see <https://www.gnu.org/licenses/>.
[screen1]: screenshots/1.png [screen1]: screenshots/1.png
[screen2]: screenshots/2.png [screen2]: screenshots/2.png
@ -123,9 +123,9 @@ contribute, even if you are not a software developer.
[screen4th]: screenshots/4.thumb.png [screen4th]: screenshots/4.thumb.png
[screen5th]: screenshots/5.thumb.png [screen5th]: screenshots/5.thumb.png
[screen6th]: screenshots/6.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 [playstore]: https://play.google.com/store/apps/details?id=org.isoron.uhabits
[releases]: https://github.com/iSoron/uhabits/releases [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 [build]: https://github.com/iSoron/uhabits/blob/dev/docs/BUILD.md
[beta]: https://play.google.com/apps/testing/org.isoron.uhabits [beta]: https://play.google.com/apps/testing/org.isoron.uhabits

@ -1,11 +1,11 @@
plugins { plugins {
val kotlinVersion = "1.4.21" val kotlinVersion = "1.5.0"
id("com.android.application") version ("4.1.0") apply (false) id("com.android.application") version ("4.2.0") apply (false)
id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.android") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.kapt") 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.android.extensions") version kotlinVersion apply (false)
id("org.jetbrains.kotlin.multiplatform") 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 { apply {

@ -133,6 +133,9 @@ android_test() {
log_error "Some $size instrumented tests failed." log_error "Some $size instrumented tests failed."
log_error "Saving logcat: $OUT_LOGCAT..." log_error "Saving logcat: $OUT_LOGCAT..."
$ADB logcat -d > $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 return 1
fi fi
log_info "$size tests passed." log_info "$size tests passed."
@ -198,13 +201,6 @@ android_build() {
return 0 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() { android_accept_images() {
find ${ANDROID_OUTPUTS_DIR}/test-screenshots -name '*.expected*' -delete find ${ANDROID_OUTPUTS_DIR}/test-screenshots -name '*.expected*' -delete
rsync -av ${ANDROID_OUTPUTS_DIR}/test-screenshots/ uhabits-android/src/androidTest/assets/ rsync -av ${ANDROID_OUTPUTS_DIR}/test-screenshots/ uhabits-android/src/androidTest/assets/
@ -233,18 +229,14 @@ CI/CD script for Loop Habit Tracker.
Usage: Usage:
build.sh build [options] build.sh build [options]
build.sh clean [options]
build.sh android-tests <API> [options] build.sh android-tests <API> [options]
build.sh android-tests-parallel <API> <API>... [options] build.sh android-tests-parallel <API> <API>... [options]
build.sh android-fetch-images [options]
build.sh android-accept-images [options] build.sh android-accept-images [options]
Commands: Commands:
build Build the app and run small tests 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 Run medium and large Android tests on an emulator
android-tests-parallel Tests multiple API levels simultaneously 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 android-accept-images Copy fetched images to corresponding assets folder
Options: Options:
@ -274,19 +266,17 @@ main() {
case "$1" in case "$1" in
build) build)
shift; _parse_opts "$@" shift; _parse_opts "$@"
clean
core_build core_build
android_build android_build
;; ;;
clean)
clean
;;
android-tests) android-tests)
shift; _parse_opts "$@" shift; _parse_opts "$@"
if [ -z $1 ]; then if [ -z $1 ]; then
_print_usage _print_usage
exit 1 exit 1
fi fi
for attempt in {1..3}; do for attempt in {1..5}; do
log_info "Running Android tests (attempt $attempt)..." log_info "Running Android tests (attempt $attempt)..."
android_test $1 && return 0 android_test $1 && return 0
done done
@ -297,9 +287,6 @@ main() {
shift; _parse_opts "$@" shift; _parse_opts "$@"
android_test_parallel $* android_test_parallel $*
;; ;;
android-fetch-images)
android_fetch_images
;;
android-accept-images) android-accept-images)
android_accept_images android_accept_images
;; ;;

Binary file not shown.

@ -1,6 +1,5 @@
#Sat Nov 28 09:55:24 CST 2020
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip

2
gradlew vendored

@ -82,6 +82,7 @@ esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@ -129,6 +130,7 @@ fi
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"` APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"` JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath # We build the pattern for arguments to be converted via cygpath

25
gradlew.bat vendored

@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% 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. @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" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init if "%ERRORLEVEL%" == "0" goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 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_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail 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 :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @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 :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell

@ -1,350 +1,377 @@
Name,Languages,"Translated (Words)","Target Words","Approved (Words)",Voted,"""+"" votes received","""-"" votes received","Winning (Words)" 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; Vietnamese; Telugu; Finnish; Tamil; Afrikaans; Esperanto; Hebrew",14790,17211,1272,0,1707,70,4259 "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)",2053,1830,2105,12,33,0,1982 "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 "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 "David (Cliff122)",Swedish,1040,1019,725,6,0,0,700,"2020-01-21 13:56:55"
dukelc,Slovak,919,880,0,0,0,0,0 "Omer I.S. (omeritzics)",Hebrew,1000,900,1097,14,1,0,946,"2020-10-11 20:10:51"
KMakoto,"Chinese Traditional",745,1146,949,0,0,0,745 dukelc,Slovak,919,880,0,0,0,0,0,"2020-08-27 14:02:41"
"Evren (evrenkiymaz)",Turkish,688,604,0,71,4,0,0 "Intan Ayunda (Intan_Ayunda)",Indonesian,800,793,962,0,0,0,711,"2020-10-14 07:51:58"
"David Nos (david.nos)","Catalan; Spanish",667,731,0,0,0,0,0 KMakoto,"Chinese Traditional",745,1146,949,0,0,0,745,"2019-10-22 04:19:52"
androide74,Italian,644,659,0,2,0,0,0 "Evren (evrenkiymaz)",Turkish,688,604,0,71,5,1,0,"2020-10-04 03:39:16"
Tomairuka,Japanese,633,1636,909,43,0,0,564 "David Nos (david.nos)","Catalan; Spanish",667,731,0,0,1,0,0,"2020-01-04 10:15:36"
"Dmitriy Bogdanov (di72nn)",Russian,625,572,1175,0,34,0,519 "Antti Kallio (antti.kallio)",Finnish,650,525,0,0,0,0,0,"2021-07-03 05:54:44"
reyhoon,Persian,624,759,0,1,1,0,0 androide74,Italian,644,659,0,2,0,0,0,"2020-02-06 15:46:28"
Osoitz,Basque,610,545,0,9,0,0,3 Tomairuka,Japanese,633,1636,909,43,0,0,564,"2020-12-12 12:14:22"
fabian.bouchal,German,548,527,0,6,0,3,72 "Dmitriy Bogdanov (di72nn)",Russian,625,572,1197,0,36,0,515,"2017-03-31 10:00:48"
boban77,Czech,509,461,0,2,0,0,0 reyhoon,Persian,624,759,0,1,3,1,0,"2020-10-01 18:17:23"
"Yoav Argov (YoavArgov)",Hebrew,501,461,0,0,1,8,3 Osoitz,Basque,610,545,0,9,0,0,3,"2018-01-23 14:07:47"
REMOVED_USER,Norwegian,501,498,501,0,148,0,501 "Saeed Esmaili (saaeed.es20)",Persian,568,774,0,5,4,0,0,"2020-11-26 15:41:15"
"Martim Parente (Sharlimar)",Portuguese,497,534,0,38,0,0,0 fabian.bouchal,German,548,527,0,6,0,3,72,"2020-01-07 06:43:37"
"chrrris1987 (Chrrris1987)",Dutch,467,478,0,23,0,0,0 boban77,Czech,509,461,0,2,0,0,0,"2020-04-30 13:18:24"
"Huy Ngo (huyngo)",Vietnamese,461,695,0,1,0,0,0 "Yoav Argov (YoavArgov)",Hebrew,501,461,0,0,1,8,103,"2017-04-28 07:23:01"
"黄克 (hk13127)","Chinese Simplified",461,765,0,1,0,0,0 REMOVED_USER,Norwegian,501,498,501,0,148,0,501,"2017-07-05 19:02:25"
"Arkadiusz Bubak (epitek)",Polish,458,416,29,24,0,3,0 "Martim Parente (Sharlimar)",Portuguese,497,534,0,38,0,0,0,"2020-08-26 10:22:11"
marco.baturan,Esperanto,452,452,0,0,0,0,0 "chrrris1987 (Chrrris1987)",Dutch,467,478,0,23,0,0,0,"2020-02-03 05:26:04"
"Sief Tarek (sieftarek135)",Arabic,447,455,0,0,0,0,0 "Huy Ngo (huyngo)",Vietnamese,461,695,0,1,0,0,0,"2020-01-26 11:58:36"
"Omer I.S. (omeritzics)",Hebrew,428,366,0,14,1,0,0 "黄克 (hk13127)","Chinese Simplified",461,765,0,1,0,0,24,"2020-01-17 23:16:03"
"Samuel Guay (SamGuay)",French,426,486,0,6,0,0,0 "Arkadiusz Bubak (epitek)",Polish,458,416,29,24,0,3,0,"2020-11-05 05:11:58"
"Diana Karaseva (Sun_Dianka)",Russian,399,373,0,10,1,0,221 marco.baturan,Esperanto,452,452,0,0,0,0,0,"2020-06-23 02:49:46"
"Alexander Jansson (dalecarlian)",Swedish,396,406,507,0,0,3,399 "Sief Tarek (sieftarek135)",Arabic,447,455,0,0,0,0,0,"2021-02-07 14:35:21"
luiandresgonzalez,Spanish,383,403,0,1,0,0,0 "Samuel Guay (SamGuay)",French,426,486,0,6,0,0,0,"2020-06-25 07:14:38"
"Thamara Andrade (tkcandrade)","Portuguese, Brazilian",380,387,0,0,1,0,252 "Diana Karaseva (Sun_Dianka)",Russian,399,373,0,10,1,0,209,"2020-01-30 06:40:02"
"Sølv Ræven (soelvraeven)",Danish,370,370,0,0,0,0,0 "Alexander Jansson (dalecarlian)",Swedish,396,406,507,0,0,3,399,"2017-06-21 01:37:32"
"Isti (eisti)",Hungarian,367,329,0,0,0,0,0 luiandresgonzalez,Spanish,383,403,0,1,28,0,0,"2020-07-11 14:20:44"
"Anh Quân (dangquanuet)",Vietnamese,362,530,0,42,1,0,0 "Thamara Andrade (tkcandrade)","Portuguese, Brazilian",380,387,0,0,1,0,252,"2020-01-09 19:35:48"
gapszi,Hungarian,348,301,0,86,0,0,0 "Sølv Ræven (soelvraeven)",Danish,370,370,0,0,0,0,0,"2020-11-28 16:46:18"
"Mahdi Nasiri (mahdi.nasiri)",Persian,343,465,0,39,3,0,0 "Isti (eisti)",Hungarian,367,329,0,0,0,0,0,"2020-12-03 12:02:51"
Seoyul,Korean,339,825,0,0,27,0,0 "Anh Quân (dangquanuet)",Vietnamese,362,530,0,42,2,0,0,"2017-10-29 12:27:44"
"Magimai Prakasam (magimai)",Tamil,336,831,0,12,0,0,0 gapszi,Hungarian,348,301,0,86,0,0,0,"2019-04-08 01:35:54"
"Michael Malak (MichaelKMalak)",Arabic,304,271,0,0,0,0,0 JY3,"Chinese Simplified",345,585,278,0,1,0,207,"2021-03-08 08:53:35"
"Elina Salminen (salminen.elina.m)",Finnish,297,227,0,0,0,0,0 "Mahdi Nasiri (mahdi.nasiri)",Persian,343,465,0,39,3,1,0,"2017-07-14 09:17:25"
ayane.m,Japanese,292,863,0,1,2,0,22 Seoyul,Korean,339,825,0,0,27,0,0,"2017-06-21 08:11:39"
"Marius Teufelweich (teufelweich)",German,249,256,606,4,0,0,146 "Magimai Prakasam (magimai)",Tamil,336,831,0,12,0,0,0,"2018-04-15 21:16:08"
cobalt59,German,237,234,0,1,23,1,132 "Michael Malak (MichaelKMalak)",Arabic,304,271,0,0,0,0,0,"2020-05-26 19:47:58"
"QWERT (lurenjia01)","Chinese Simplified",236,407,0,0,0,0,0 "Elina Salminen (salminen.elina.m)",Finnish,297,227,0,0,0,0,0,"2021-01-06 01:28:57"
beriain,Basque,234,235,0,0,2,0,0 ayane.m,Japanese,292,863,0,1,3,0,22,"2019-11-20 03:28:26"
"Intan Ayunda (Intan_Ayunda)",Indonesian,228,239,336,0,0,0,135 Blinkin,Dutch,284,318,0,1,0,0,0,"2021-06-14 10:30:05"
pnhpnh,Vietnamese,225,343,0,1,3,0,0 "Marius Teufelweich (teufelweich)",German,249,256,606,4,2,0,146,"2021-03-12 04:11:38"
"Dika Fitrian Dwi Putra (OsamuDazai)",Indonesian,221,215,0,0,0,0,33 cobalt59,German,237,234,0,1,24,1,132,"2017-06-05 05:18:33"
easyrepro,Telugu,214,297,0,0,0,0,0 "QWERT (lurenjia01)","Chinese Simplified",236,407,0,0,8,0,19,"2020-03-08 01:46:25"
taras-ko,Ukrainian,211,183,0,1,4,0,19 beriain,Basque,234,235,0,0,2,0,0,"2017-03-31 15:42:28"
sojusnik,German,207,200,1,0,30,0,66 pnhpnh,Vietnamese,225,343,0,1,3,0,0,"2017-11-27 12:06:07"
axmed99,Ukrainian,203,177,0,40,0,0,53 "Dika Fitrian Dwi Putra (OsamuDazai)",Indonesian,221,215,0,0,0,0,48,"2020-07-13 04:40:27"
"Heru Yen (heruyen)",Indonesian,201,201,0,0,0,0,2 easyrepro,Telugu,214,297,0,0,0,0,0,"2020-06-12 12:52:10"
Ishmaeel,Turkish,193,174,0,129,6,0,0 taras-ko,Ukrainian,211,183,0,1,4,0,19,"2017-10-26 16:52:22"
fbruna17,Danish,181,179,0,1,0,0,0 sojusnik,German,207,200,1,0,30,0,66,"2017-04-03 17:11:56"
"Omry Cohen (omrycohen)",Hebrew,175,156,0,1,0,0,0 axmed99,Ukrainian,203,177,0,40,0,0,53,"2021-04-01 03:56:20"
Bryanx,Dutch,174,165,0,5,0,0,0 "Heru Yen (heruyen)",Indonesian,201,201,0,0,0,0,25,"2020-06-29 18:39:15"
"Pierre GALIEGUE (pierre.galiegue)",French,171,194,0,24,2,0,0 "Vijaykumar Borkar (vjkumar)",Hindi,200,364,0,11,0,0,0,"2021-08-06 16:12:15"
DionysosDV,Greek,165,153,0,0,0,0,0 Ishmaeel,Turkish,193,174,0,129,6,0,0,"2017-10-04 03:54:00"
"Gustavo Lima (GustavoLima)",Portuguese,158,177,0,1,4,10,0 "Aputsiak Niels Janussen (aputtu)",Danish,187,200,0,0,0,0,0,"2019-08-28 05:47:42"
"Aputsiak Niels Janussen (aputtu)",Danish,153,171,0,0,0,0,0 _translator,French,181,206,0,11,0,0,0,"2021-07-06 07:54:12"
plitwin,Polish,145,128,0,1,16,0,26 fbruna17,Danish,181,179,0,1,0,0,0,"2021-01-28 15:48:47"
"Lương Vĩnh Khang (LuongVinhKhang)",Vietnamese,144,256,0,0,46,1,0 "Omry Cohen (omrycohen)",Hebrew,175,156,0,1,0,0,33,"2021-01-18 07:33:23"
azzamsa,Indonesian,142,136,0,48,0,1,50 Bryanx,Dutch,174,165,0,5,0,0,0,"2019-11-21 17:08:12"
"Neysa Nasywa (neysanasywa)",Indonesian,140,141,0,0,0,0,35 "Pierre GALIEGUE (pierre.galiegue)",French,171,194,0,24,4,0,0,"2020-08-16 11:41:35"
JY3,"Chinese Simplified",136,217,80,0,0,0,80 bruhwut,Vietnamese,171,268,0,1,0,0,0,"2021-05-21 07:16:30"
"Mohammed Imthath (mimthath4)",Tamil,136,274,0,0,11,0,0 DionysosDV,Greek,165,153,0,0,0,0,0,"2021-02-27 19:05:25"
roptat,French,132,154,0,112,88,5,0 "Gustavo Lima (GustavoLima)",Portuguese,158,177,0,1,4,10,0,"2020-08-26 10:35:05"
"Trần Thái (tranhoangthai2001)",Vietnamese,127,186,0,8,1,0,0 oscfd,Spanish,155,166,0,1,4,0,0,"2021-05-21 17:58:22"
"OP Smosher (teenwolffan44)","Serbian (Cyrillic)",124,122,0,0,0,0,18 plitwin,Polish,145,128,0,1,16,0,26,"2021-01-20 06:18:37"
4001982248998,Esperanto,122,119,0,0,0,0,0 "Lương Vĩnh Khang (LuongVinhKhang)",Vietnamese,144,256,0,0,46,1,0,"2017-08-10 10:05:58"
"StoP4Me (Lcqp)",Romanian,121,119,0,0,3,0,0 azzamsa,Indonesian,142,136,0,48,0,1,26,"2017-06-16 18:29:45"
Sebastian05067,Spanish,114,133,0,55,18,0,0 "yoding (yodingc)","Chinese Traditional; Chinese Simplified",141,271,0,10,0,0,0,"2021-07-07 01:45:45"
"Tanya (MagicUnderHood)",Russian,114,98,0,19,0,0,32 "Neysa Nasywa (neysanasywa)",Indonesian,140,141,0,0,0,0,60,"2020-11-18 10:32:10"
REMOVED_USER,Arabic,111,106,0,22,21,2,0 "Mohammed Imthath (mimthath4)",Tamil,136,274,0,0,11,0,0,"2018-02-15 22:41:15"
mohmans,Arabic,109,103,0,2,0,0,0 roptat,French,132,154,0,112,89,5,0,"2017-04-19 16:54:47"
"Ivan Krušlin (krux3r)",Croatian,108,122,503,0,0,0,108 "Trần Thái (tranhoangthai2001)",Vietnamese,127,186,0,8,1,0,0,"2018-03-01 10:51:39"
"Iabin Arteaga (iabin)",Spanish,108,111,0,4,20,0,0 "OP Smosher (teenwolffan44)","Serbian (Cyrillic)",124,122,0,0,0,0,18,"2020-11-05 09:41:35"
2kaafone,Finnish,105,90,0,0,0,0,0 4001982248998,Esperanto,122,119,0,0,0,0,0,"2017-10-08 04:13:02"
"Adam Jurkiewicz (hasztagg)",Polish,104,105,529,0,0,0,104 "StoP4Me (Lcqp)",Romanian,121,119,0,0,3,0,0,"2018-05-06 18:51:59"
"Saeed Esmaili (saaeed.es20)",Persian,104,141,0,0,0,0,0 alalloush,Arabic,118,129,0,2,2,0,0,"2017-03-31 12:37:17"
"just a name bro (justanamebr0)",Danish,98,109,0,0,1,0,0 "Eilif Adelvice (adelvice)",Spanish,116,126,0,96,0,0,0,"2021-08-05 07:20:21"
"Nam Nguyen (namnl2706)",Vietnamese,95,137,0,0,0,0,0 Sebastian05067,Spanish,114,133,0,55,28,0,0,"2017-05-14 00:48:16"
"손유정 (yuwon1213)",Korean,95,57,0,0,0,0,0 "Tanya (MagicUnderHood)",Russian,114,98,0,19,0,0,54,"2019-04-21 10:44:03"
ranmagen,Hebrew,91,78,0,0,0,0,0 REMOVED_USER,Arabic,111,106,0,22,21,2,0,"2018-01-05 07:01:45"
LoneWanderer,"Chinese Traditional",90,137,0,4,0,0,0 mohmans,Arabic,109,103,0,2,0,0,0,"2020-11-23 02:48:00"
"Vo - (voyl)","Chinese Traditional",89,126,0,0,5,0,0 "Iabin Arteaga (iabin)",Spanish,108,111,0,4,21,0,0,"2017-08-26 21:08:54"
ikkaz,Indonesian,89,84,0,5,0,0,4 "Ivan Krušlin (krux3r)",Croatian,108,122,503,0,0,0,108,"2017-03-31 09:15:24"
"Irene K (Heaun)",Korean,88,75,0,25,0,0,0 2kaafone,Finnish,105,90,0,0,0,0,0,"2019-08-12 06:58:48"
"Kumar Anand (kumar0500)",Hindi,87,125,0,0,0,0,0 "Adam Jurkiewicz (hasztagg)",Polish,104,105,529,0,0,0,104,"2017-03-31 09:50:51"
Prosta4ok_ua,Ukrainian,87,84,0,1,0,0,17 "just a name bro (justanamebr0)",Danish,98,109,0,0,1,0,0,"2019-06-19 11:57:55"
"Ohad Edri (ohadalte)",Hebrew,85,79,0,0,1,3,0 "Nam Nguyen (namnl2706)",Vietnamese,95,137,0,0,0,0,0,"2020-08-18 23:02:33"
helectron,Persian,84,102,0,1,0,0,0 "손유정 (yuwon1213)",Korean,95,57,0,0,0,0,0,"2021-03-30 05:25:33"
"Radu Cebotari (wildProgrammer)",Romanian,84,92,0,1,0,0,0 ranmagen,Hebrew,91,78,0,0,0,0,0,"2021-02-16 05:44:31"
"Israa Z (sosozozo)",Arabic,79,87,0,43,11,0,3 LoneWanderer,"Chinese Traditional",90,137,0,4,0,0,0,"2020-09-29 05:24:48"
"Sofia Neves (sofiasonev)","Portuguese, Brazilian",79,84,0,1,0,0,46 "Vo - (voyl)","Chinese Traditional",89,126,0,0,5,0,0,"2020-09-02 23:34:42"
Tiralka,French,79,91,0,92,1,0,0 ikkaz,Indonesian,89,84,0,5,0,0,4,"2019-09-02 19:58:54"
"Jacob Roller (jdr28070)",Korean,79,61,0,0,0,0,0 "Irene K (Heaun)",Korean,88,75,0,25,0,0,0,"2020-03-16 11:31:12"
"Toni Mustonen (toni.mustonen)",Finnish,78,72,0,0,0,0,0 Prosta4ok_ua,Ukrainian,87,84,0,1,0,0,17,"2020-01-23 19:43:41"
"Michael (quelbs)",German,76,75,0,1,0,0,39 "Kumar Anand (kumar0500)",Hindi,87,125,0,0,0,0,0,"2020-11-07 02:46:09"
"Fauz Aladeem (topfauz)",Arabic,76,77,0,0,0,1,0 "Ohad Edri (ohadalte)",Hebrew,85,79,0,0,1,3,18,"2020-07-04 03:42:09"
RealDonald,Dutch,67,69,0,121,10,0,0 helectron,Persian,84,102,0,1,0,0,0,"2021-03-02 04:10:51"
sirekanyan,"Armenian; Russian",66,65,0,0,0,0,0 "Radu Cebotari (wildProgrammer)",Romanian,84,92,0,1,0,0,0,"2020-02-05 01:20:00"
"Константин К. (kocyak1991)",Russian,64,60,0,0,1,2,0 "Sofia Neves (sofiasonev)","Portuguese, Brazilian",79,84,0,1,0,0,46,"2020-03-12 18:19:46"
"Laura Sophie (laurasophie20)",German,62,67,0,4,0,0,0 "Jacob Roller (jdr28070)",Korean,79,61,0,0,0,0,0,"2020-01-03 11:36:40"
raden20,Indonesian,61,62,177,0,1,0,64 Tiralka,French,79,91,0,92,1,0,0,"2018-02-09 18:39:01"
"Jan Wojtecki (j4nw)",Polish,58,46,0,0,0,0,26 "Israa Z (sosozozo)",Arabic,79,87,0,43,12,0,3,"2017-11-27 14:10:50"
"Deepak Bharathi (deepakbharathi1994)",Tamil,56,107,0,0,11,4,0 "Toni Mustonen (toni.mustonen)",Finnish,78,72,0,0,0,0,0,"2017-09-02 05:34:12"
"Андрій Козицький (andriikozytskyi1108)",Ukrainian,52,52,0,0,1,0,0 "Fauz Aladeem (topfauz)",Arabic,76,77,0,0,0,1,0,"2020-02-21 22:46:12"
REMOVED_USER,Italian,51,52,0,2,0,0,0 "Michael (quelbs)",German,76,75,0,1,0,0,39,"2020-08-18 07:39:26"
govindap,"Japanese; Hindi",51,114,0,6,1,0,0 "Oliver Gronowski (OliverGronowski)",German,70,69,0,5,0,0,0,"2021-05-14 16:37:10"
"Mare Geldenhuys (mare.geldenhuys)",Afrikaans,50,57,0,0,0,0,0 RealDonald,Dutch,67,69,0,121,10,0,0,"2017-06-23 20:10:12"
"Peter Williams (williamspete001)",Japanese,49,133,0,1,0,0,3 sirekanyan,"Armenian; Russian",66,65,0,0,0,0,0,"2020-04-18 11:32:52"
"Behnood HRazy (behnoodhr)",Persian,49,70,0,0,0,0,0 "Константин К. (kocyak1991)",Russian,64,60,0,0,1,2,0,"2018-06-10 13:39:37"
J3ll3nl,Dutch,48,48,0,0,17,1,3 "Laura Sophie (laurasophie20)",German,62,67,0,4,0,0,0,"2018-01-06 14:21:24"
"tat bz (Tat_i)",German,48,56,0,55,0,0,27 "Alparslan Sakci (sakci)",Turkish,61,55,0,11,0,0,0,"2021-06-10 11:59:22"
vach,Armenian,47,36,0,0,0,0,0 raden20,Indonesian,61,62,177,0,1,0,64,"2017-04-09 22:04:23"
andowero,Czech,47,38,0,0,0,0,0 "Jan Wojtecki (j4nw)",Polish,58,46,0,0,0,0,26,"2017-11-02 05:42:14"
"Andrew Firnes (Anechan)",Russian,47,47,0,3,0,0,29 "Deepak Bharathi (deepakbharathi1994)",Tamil,56,107,0,0,11,4,0,"2017-09-17 08:00:31"
"Coni Ragni (coni2ragnii)",Spanish,46,46,0,0,0,0,0 "Peter Williams (williamspete001)",Japanese,55,147,0,2,0,0,3,"2020-01-01 13:17:44"
"Rahul Shishodia (rahul.shishodia.10)",Hindi,46,85,0,6,0,0,0 "Андрій Козицький (andriikozytskyi1108)",Ukrainian,52,52,0,0,1,0,0,"2018-10-22 01:45:08"
Cp0204,"Chinese Simplified",45,72,0,0,0,0,0 "Nil riera (nilriera2000)",Catalan,52,61,0,1,0,0,0,"2021-06-22 16:37:44"
"cc (cavaz)",Italian,44,41,0,0,0,0,0 REMOVED_USER,Italian,51,52,0,2,0,0,0,"2017-08-21 05:15:31"
"Kamil Dziadek (prso94)",Polish,43,39,0,0,2,0,0 govindap,"Japanese; Hindi",51,114,0,6,1,0,0,"2020-06-02 20:15:52"
"Boban Jagertraum (boban40)",Czech,43,38,0,2,1,1,0 "Mare Geldenhuys (mare.geldenhuys)",Afrikaans,50,57,0,0,0,0,0,"2017-10-20 18:00:14"
andreea.muscalagiu,Romanian,42,52,0,1,0,0,0 "Behnood HRazy (behnoodhr)",Persian,49,70,0,0,0,0,0,"2017-11-25 10:57:21"
"Me Me (gentelwom)",Arabic,42,40,0,0,0,0,0 "tat bz (Tat_i)",German,48,56,0,55,0,0,27,"2021-03-26 05:12:54"
"Balázs Keresztury (belidzs)",Hungarian,42,41,501,0,7,0,38 J3ll3nl,Dutch,48,48,0,0,17,1,3,"2017-03-31 11:56:09"
MStefanov,Bulgarian,41,55,2,0,2,0,2 "Andrew Firnes (Anechan)",Russian,47,47,0,3,0,0,29,"2019-09-18 09:51:59"
"Ali Zali (stm19951995)",Persian,40,60,0,0,0,0,0 andowero,Czech,47,38,0,0,0,0,0,"2020-01-20 02:29:01"
"Sofia Veijonen (Suklaa) (sofia.veijonen)",Finnish,40,33,0,0,0,0,0 vach,Armenian,47,36,0,0,0,0,0,"2020-04-18 16:53:12"
dusanstrgar,Slovenian,39,41,0,0,0,0,0 "Rahul Shishodia (rahul.shishodia.10)",Hindi,46,85,0,6,5,1,0,"2018-12-24 22:18:19"
"Limin Lu (liminlu)","Chinese Simplified",39,79,503,0,0,0,39 "Coni Ragni (coni2ragnii)",Spanish,46,46,0,0,0,0,0,"2021-02-28 20:18:37"
Anshoe,Tamil,38,65,0,14,0,0,0 Cp0204,"Chinese Simplified",45,72,0,0,0,0,0,"2019-08-20 11:04:27"
anasshm,Arabic,37,36,0,9,0,0,0 "cc (cavaz)",Italian,44,41,0,0,0,0,0,"2017-04-01 04:21:08"
hrexen,Armenian,37,37,0,0,0,0,0 "Boban Jagertraum (boban40)",Czech,43,38,0,2,1,1,0,"2017-03-31 09:39:16"
REMOVED_USER,Swedish,36,33,0,5,1,0,0 "Kamil Dziadek (prso94)",Polish,43,39,0,0,2,0,0,"2020-04-06 17:12:06"
"Abdulrahman (D7M)",Arabic,36,39,0,0,0,0,0 "Me Me (gentelwom)",Arabic,42,40,0,0,0,0,0,"2020-11-08 20:44:01"
"長谷川知里 (chase0213)",Japanese,34,138,0,13,0,0,24 "Ali Elsheikh (aelsheikh1987)",Arabic,42,41,0,0,0,0,0,"2021-06-16 10:17:26"
"Piotr Łuczyński (peterluczynski)",Polish,33,30,0,6,5,0,2 "Balázs Keresztury (belidzs)",Hungarian,42,41,501,0,7,0,38,"2017-04-06 02:40:24"
"milad farahani (miladfarmahini90)",Persian,33,44,0,18,0,0,3 andreea.muscalagiu,Romanian,42,52,0,1,0,0,0,"2017-10-22 07:19:49"
"Luis E. Perichon (luisperichon)",Spanish,33,40,0,104,0,0,0 "Mateusz Duda (MateuszDuda)",Polish,42,42,0,0,0,0,0,"2021-08-17 11:27:11"
andriikozytskyi2625,Ukrainian,31,23,0,0,0,0,0 MStefanov,Bulgarian,41,55,2,0,2,0,2,"2017-03-31 16:09:02"
JoeLi,"Chinese Traditional",31,70,0,12,0,0,24 "Sofia Veijonen (Suklaa) (sofia.veijonen)",Finnish,40,33,0,0,0,0,0,"2018-03-07 09:24:22"
Moastafa,Arabic,31,25,0,0,0,0,0 "Ali Zali (stm19951995)",Persian,40,60,0,0,0,0,0,"2020-03-23 19:57:26"
REMOVED_USER,Russian,31,30,0,2,4,0,3 "Limin Lu (liminlu)","Chinese Simplified",39,79,503,0,0,0,39,"2017-03-31 09:49:35"
"hamza gamal (hamzagamal4444)",Arabic,31,28,0,0,0,0,0 dusanstrgar,Slovenian,39,41,0,0,0,0,0,"2017-03-31 10:30:28"
yancyn,"Chinese Simplified",30,40,0,0,0,0,0 Anshoe,Tamil,38,65,0,14,0,0,0,"2018-01-02 11:06:52"
"비니몬youtube (khj01025276475)",Korean,29,25,0,0,0,0,0 anasshm,Arabic,37,36,0,9,0,0,0,"2019-01-27 04:07:22"
"Ruud Schouten (ruudschouten)",Dutch,29,32,0,41,3,0,0 hrexen,Armenian,37,37,0,0,0,0,0,"2020-12-09 02:30:34"
"Guillaume Collic (gcollic)",French,26,28,0,126,11,0,0 "Abdulrahman (D7M)",Arabic,36,39,0,0,0,0,0,"2020-01-29 18:55:30"
"Niraj Yadav (neverforgetniraj)",Hindi,26,48,0,0,0,0,0 "Maria Chushnyakova (maria.ch)",Russian,36,31,0,3,0,0,0,"2021-08-17 03:23:58"
"Radoslaw Biernacki (radoslaw.biernacki)",Polish,26,24,0,8,0,0,1 REMOVED_USER,Swedish,36,33,0,5,1,0,0,"2018-09-29 17:47:33"
"Jonny I (jonny99dj)",Italian,26,26,0,5,0,0,0 "長谷川知里 (chase0213)",Japanese,34,138,0,13,0,0,24,"2018-12-14 10:52:44"
"Aaron Dalton (Perlkonig)",French,26,25,0,141,1,0,0 "Luis E. Perichon (luisperichon)",Spanish,33,40,0,104,0,0,0,"2017-09-04 13:46:06"
"Eddie (eddieattaboy)","Chinese Traditional",25,34,0,1,0,0,0 "Piotr Łuczyński (peterluczynski)",Polish,33,30,0,6,5,0,2,"2020-01-29 07:27:40"
Pan_Filuta,Czech,25,21,0,5,4,0,3 "milad farahani (miladfarmahini90)",Persian,33,44,0,18,1,0,3,"2017-08-31 16:09:00"
"eduard83 (barbany.eduard)",Catalan,24,25,0,2,0,0,0 andriikozytskyi2625,Ukrainian,31,23,0,0,0,0,0,"2019-07-08 00:16:41"
"Ľuboš Čaky (lubos.caky)",Slovak,23,22,0,0,0,0,0 Moastafa,Arabic,31,25,0,0,0,0,0,"2020-07-06 11:37:53"
"Caner Başaran (basarancaner)",Turkish,23,21,0,0,20,0,0 "hamza gamal (hamzagamal4444)",Arabic,31,28,0,0,0,0,0,"2020-08-03 15:23:34"
hodanli,Turkish,22,26,0,0,1,0,0 REMOVED_USER,Russian,31,30,0,2,4,0,3,"2018-12-03 23:55:47"
"Neeraj Verma (verma.neeraj.in)",Hindi,22,37,0,0,1,0,0 JoeLi,"Chinese Traditional",31,70,0,12,0,0,24,"2017-06-25 05:32:48"
"Alcarkse (alexis.brusle)",French,21,25,0,7,11,0,0 yancyn,"Chinese Simplified",30,40,0,0,0,0,1,"2020-05-18 20:06:03"
"Shashwat (goforgold)",Hindi,20,33,0,0,0,0,0 "비니몬youtube (khj01025276475)",Korean,29,25,0,0,0,0,0,"2020-02-09 20:44:35"
"사자솥 (toke1597)",Korean,19,19,0,0,0,0,0 "Ruud Schouten (ruudschouten)",Dutch,29,32,0,41,3,0,0,"2017-07-22 17:49:17"
"İsa Eş (IsaEs)",Turkish,19,17,0,0,6,1,0 "Aaron Dalton (Perlkonig)",French,26,25,0,141,1,0,0,"2018-01-14 12:58:19"
sheeCesu,French,19,18,0,48,2,0,0 "Niraj Yadav (neverforgetniraj)",Hindi,26,48,0,0,0,0,0,"2017-04-11 02:26:50"
can13,Turkish,19,14,0,8,0,0,0 "Guillaume Collic (gcollic)",French,26,28,0,126,11,0,0,"2017-05-05 16:13:00"
"Magdalena Urbańczyk (madziia139)",Polish,19,19,0,0,0,0,0 "Radoslaw Biernacki (radoslaw.biernacki)",Polish,26,24,0,8,0,0,1,"2020-12-15 17:55:31"
axikman11111,Uyghur,18,19,0,0,0,0,0 "Jonny I (jonny99dj)",Italian,26,26,0,5,0,0,0,"2017-10-07 07:35:34"
Adeline31,French,17,20,0,3,0,0,0 "Eddie (eddieattaboy)","Chinese Traditional",25,34,0,1,0,0,0,"2020-11-04 21:48:05"
"Hoon Jung (hooni100)",Korean,17,10,0,0,0,0,0 Pan_Filuta,Czech,25,21,0,5,4,0,3,"2017-04-29 12:55:14"
"Ceara Lopez (cealopez)",Spanish,17,18,0,0,5,1,0 "eduard83 (barbany.eduard)",Catalan,24,25,0,2,0,0,0,"2019-06-26 14:59:47"
takoyakibento,Korean,17,13,0,3,0,0,0 "Ľuboš Čaky (lubos.caky)",Slovak,23,22,0,0,0,0,0,"2019-07-02 16:51:44"
bretzel15,German,16,20,0,0,0,0,0 "Caner Başaran (basarancaner)",Turkish,23,21,0,0,21,0,0,"2017-04-09 06:34:59"
engineeringforgood,Russian,16,15,0,0,0,0,0 hodanli,Turkish,22,26,0,0,1,0,0,"2017-11-03 14:33:41"
"Şamil Ateşoğlu (m.samilatesoglu)",Turkish,16,22,0,11,6,3,0 gnu-ewm,Polish,22,23,0,6,0,0,0,"2021-02-24 03:42:01"
DebatablySane,Bulgarian,16,15,0,48,0,0,0 "Neeraj Verma (verma.neeraj.in)",Hindi,22,37,0,0,1,0,0,"2018-07-23 07:16:41"
"Bhava Tharini (bhavidanush)",Tamil,15,37,0,0,0,0,0 "Alcarkse (alexis.brusle)",French,21,25,0,7,11,0,0,"2017-08-06 09:32:29"
"Anastasia Borchuk (al2.borchuk)",Russian,14,14,0,0,0,0,0 olbotta,Italian,20,25,0,2,0,0,0,"2021-06-06 04:22:55"
"EuiHo Hwang (euiho.hwang)",Korean,14,16,0,0,0,0,0 "Shashwat (goforgold)",Hindi,20,33,0,0,0,0,0,"2020-05-17 10:34:42"
iamsurajbobade,Hindi,14,30,0,0,0,0,0 "Magdalena Urbańczyk (madziia139)",Polish,19,19,0,0,0,0,0,"2017-10-21 03:01:04"
"Zeynep Esen (nezihaesen50)",Turkish,14,13,0,0,0,0,0 sheeCesu,French,19,18,0,48,4,0,0,"2017-12-21 17:01:39"
"Fikret Bilici (fikretbilici)",Turkish,14,13,0,0,0,0,0 can13,Turkish,19,14,0,8,0,0,0,"2021-01-03 10:39:03"
"Zeeshan Rabbani (Zeera)",Hindi,14,25,0,0,0,0,0 "İsa Eş (IsaEs)",Turkish,19,17,0,0,6,1,0,"2017-06-20 07:30:22"
"Sanji Vinsmock (mukanzhanbolat4)",Russian,14,14,0,0,0,0,0 "사자솥 (toke1597)",Korean,19,19,0,0,0,0,0,"2020-02-04 13:36:11"
"Nenad Vukotic (vukotic.nenad)","Serbian (Cyrillic)",13,13,0,1,2,6,0 axikman11111,Uyghur,18,19,0,0,0,0,0,"2018-10-13 12:25:31"
"Uwe Mönks (schirinowski)",German,13,12,0,0,0,0,0 "Hoon Jung (hooni100)",Korean,17,10,0,0,0,0,0,"2021-01-03 02:26:54"
"Dave (xdave)",Hungarian,13,11,0,0,0,0,0 "Ceara Lopez (cealopez)",Spanish,17,18,0,0,5,1,0,"2017-08-22 22:56:13"
soura2,Arabic,12,13,0,0,0,0,0 takoyakibento,Korean,17,13,0,3,0,0,0,"2020-08-01 08:44:15"
"shreyas (techiespace)",Hindi,12,20,0,0,0,0,0 Adeline31,French,17,20,0,3,0,0,0,"2019-12-06 00:00:11"
"Jo Chuang (josephch405)","Chinese Traditional",11,24,0,0,0,0,11 engineeringforgood,Russian,16,15,0,0,0,0,16,"2021-01-22 03:32:35"
Vmrc,French,11,12,0,2,0,0,0 bretzel15,German,16,20,0,0,0,0,0,"2020-04-06 02:49:14"
"sathvic k (sathvictripleseven)",Telugu,10,17,0,0,0,0,0 "Şamil Ateşoğlu (m.samilatesoglu)",Turkish,16,22,0,11,6,3,0,"2017-07-05 18:37:08"
"Edwin van Rooij (edwinvrooij)",Dutch,10,13,0,17,0,0,0 DebatablySane,Bulgarian,16,15,0,48,0,0,0,"2017-07-10 15:13:18"
"Brian Camacho (bmcamacho)",Polish,10,11,0,0,1,0,0 "Bhava Tharini (bhavidanush)",Tamil,15,37,0,0,0,0,0,"2019-10-09 05:43:11"
"Ahmed Mosaad (ahmed.mosaad2018)",Arabic,10,12,0,6,0,0,0 "Zeynep Esen (nezihaesen50)",Turkish,14,13,0,0,0,0,0,"2020-01-28 07:05:15"
"Mihael Wagner (miha.wagner)",Slovenian,10,9,0,7,0,0,0 "Fikret Bilici (fikretbilici)",Turkish,14,13,0,0,0,0,0,"2020-06-21 17:16:11"
"Anonymous edgy nerd (yamentaad)",Arabic,10,13,0,1,0,0,0 "EuiHo Hwang (euiho.hwang)",Korean,14,16,0,0,0,0,0,"2020-06-23 02:40:01"
"Martin Vostatek (martinvostatek)",Czech,9,8,0,32,2,0,0 "Zeeshan Rabbani (Zeera)",Hindi,14,25,0,0,0,0,0,"2020-09-15 11:32:01"
"Sourire Lucide (sourire_lucide)",Russian,9,10,0,0,1,0,0 "Faiz Ahamed (faiznewton)",Tamil,14,31,0,0,0,0,0,"2021-05-06 23:06:46"
"Suhaili Hassan (kucingsyg96)",Indonesian,9,10,0,0,0,0,0 "Anastasia Borchuk (al2.borchuk)",Russian,14,14,0,0,0,0,0,"2020-04-14 13:22:49"
"Seweryn Piotrowski (Draxxsx)",Polish,9,10,0,0,19,0,0 iamsurajbobade,Hindi,14,30,0,0,0,0,0,"2018-05-21 11:23:27"
Rex123,Persian,8,8,0,0,0,0,0 "Sanji Vinsmock (mukanzhanbolat4)",Russian,14,14,0,0,0,0,0,"2020-02-18 12:38:54"
"Konstantin (KZhidovinov)",Russian,7,7,0,0,0,0,0 "Maro Chr (caprisunglasses)",Greek,14,17,0,0,0,0,0,"2021-08-17 06:53:33"
pkorove,Greek,7,7,0,0,0,0,0 "Nenad Vukotic (vukotic.nenad)","Serbian (Cyrillic)",13,13,0,1,2,6,0,"2019-01-31 14:29:15"
ftfoi,Norwegian,7,6,0,0,0,0,0 "Uwe Mönks (schirinowski)",German,13,12,0,0,0,0,0,"2021-02-18 04:00:41"
"Андрій Козицький (andriikozytskyi3807)",Ukrainian,7,12,0,2,0,0,0 "Dave (xdave)",Hungarian,13,11,0,0,0,0,0,"2020-03-02 20:56:50"
"Vladimir Pavlychev (KeyJoo)",Russian,7,9,0,0,0,0,0 soura2,Arabic,12,13,0,0,0,0,0,"2020-01-13 19:23:47"
"Andrey ZaXeLoN (waragaa)",Russian,7,7,0,8,1,0,0 "shreyas (techiespace)",Hindi,12,20,0,0,0,0,0,"2018-06-10 01:14:26"
erfan2927,Persian,6,6,0,0,0,0,0 "Sonu Sharma (riteetude)",Hindi,11,23,0,0,0,0,0,"2021-05-30 19:38:00"
dragnus,Arabic,6,6,0,1,1,0,0 Vmrc,French,11,12,0,2,0,0,0,"2020-11-02 05:35:06"
"Sam (SorodonSorodon)",German,6,6,0,13,0,0,0 "Jo Chuang (josephch405)","Chinese Traditional",11,24,0,0,0,0,11,"2017-06-16 20:21:06"
ChloeLiang,Japanese,6,22,0,0,1,0,3 "sathvic k (sathvictripleseven)",Telugu,10,17,0,0,0,0,0,"2020-09-11 08:11:32"
"Burak Ceylan (7burakceylan)",Turkish,6,6,0,0,0,0,0 "Brian Camacho (bmcamacho)",Polish,10,11,0,0,1,0,0,"2020-08-03 02:27:28"
"닉닉 (seohu9466)",Korean,6,14,0,13,0,0,0 "Anonymous edgy nerd (yamentaad)",Arabic,10,13,0,1,0,0,0,"2018-05-06 09:23:57"
"Matthias Joly (joly.matt12)",French,5,8,0,27,1,0,0 "Edwin van Rooij (edwinvrooij)",Dutch,10,13,0,17,0,0,0,"2018-11-05 03:59:10"
"Guerra Ivaneth (rossanaiva-04)",Spanish,5,7,0,0,0,0,0 "Mihael Wagner (miha.wagner)",Slovenian,10,9,0,7,0,0,0,"2017-10-18 18:26:29"
"Manuel Tassi (Mannivu)",Italian,5,6,0,0,0,0,0 "Ahmed Mosaad (ahmed.mosaad2018)",Arabic,10,12,0,6,0,0,0,"2021-02-03 18:45:43"
"Micaela Pighin (micaelapiighin)",Spanish,5,6,0,1,0,0,0 "Suhaili Hassan (kucingsyg96)",Indonesian,9,10,0,0,0,0,0,"2018-06-10 11:55:09"
"Дмитрий Хапенков (d.khapenkov)",Russian,5,5,0,6,4,0,2 "Martin Vostatek (martinvostatek)",Czech,9,8,0,32,2,0,0,"2019-01-21 13:52:36"
andriikozytskyi2018,Ukrainian,5,5,0,0,0,0,0 "Seweryn Piotrowski (Draxxsx)",Polish,9,10,0,0,19,0,0,"2020-01-02 09:55:48"
"Neko123 (emandic11)","Serbian (Cyrillic)",4,4,0,57,0,0,0 "Sourire Lucide (sourire_lucide)",Russian,9,10,0,0,1,0,0,"2018-03-22 01:37:55"
marmo,German,4,4,0,0,0,0,0 Rex123,Persian,8,8,0,0,0,0,0,"2017-07-01 00:47:42"
"Eli Besirov (elibesirov07)",Turkish,4,4,0,0,0,0,0 "Andrey ZaXeLoN (waragaa)",Russian,7,7,0,8,1,0,0,"2017-09-18 21:37:42"
"Lopo Isaac Fernández (rocapata)",Spanish,4,3,0,0,0,0,0 "Konstantin (KZhidovinov)",Russian,7,7,0,0,0,0,0,"2020-01-29 13:35:12"
bziuum,Polish,4,4,0,0,0,0,0 "Андрій Козицький (andriikozytskyi3807)",Ukrainian,7,12,0,2,0,0,0,"2020-09-26 20:31:56"
"Thoum Ptrgnt (thomas.petrignet)",French,3,3,0,2,0,3,0 ftfoi,Norwegian,7,6,0,0,0,0,0,"2020-04-11 20:42:35"
"Vagner Roberto (vagner.trompete)","Portuguese, Brazilian",3,3,0,0,0,0,0 "Vladimir Pavlychev (KeyJoo)",Russian,7,9,0,0,0,0,0,"2017-12-18 02:46:56"
"Unnie Here (Carb)",Hindi,3,8,0,0,0,0,0 pkorove,Greek,7,7,0,0,0,0,0,"2020-03-07 11:36:12"
carsten_kafke,German,3,3,0,43,0,0,3 erfan2927,Persian,6,6,0,0,0,0,0,"2018-04-09 02:12:44"
Magidxz,Arabic,3,3,0,0,0,0,0 "Burak Ceylan (7burakceylan)",Turkish,6,6,0,0,0,0,0,"2018-05-20 17:24:19"
atomjani,Hungarian,3,3,0,0,0,0,0 "Sam (SorodonSorodon)",German,6,6,0,13,0,0,0,"2017-04-14 11:09:27"
"Péter Bernát (bernatp)",Hungarian,3,2,0,0,0,0,0 "닉닉 (seohu9466)",Korean,6,14,0,13,0,0,0,"2017-10-09 23:08:15"
"Igor Piskun (i_piskun)",Ukrainian,3,3,0,0,0,0,0 "Sarita Cajas (sarayanacajas)",Spanish,6,4,0,0,1,0,0,"2021-05-14 14:27:59"
"joabe gabriel (joabegabrielcma1)","Portuguese, Brazilian",3,4,0,0,0,0,0 ChloeLiang,Japanese,6,22,0,0,1,0,3,"2017-08-08 05:02:59"
"Oleg Kogut (kogut_oleg)",Ukrainian,3,3,0,0,0,0,0 "Manuel Tassi (Mannivu)",Italian,5,6,0,0,0,0,0,"2021-01-03 11:00:33"
"Andrea Bianchi (andreawhite1597)",Italian,3,1,0,1,0,0,0 "Tomáš Hrabáček (Hrabyyy)",Czech,5,3,0,0,0,0,0,"2021-05-27 11:58:11"
"Gabriel Cavalcante (gabrielc.alves14)","Portuguese, Brazilian",3,4,0,0,0,0,0 "Guerra Ivaneth (rossanaiva-04)",Spanish,5,7,0,0,0,0,0,"2019-02-03 16:48:59"
REMOVED_USER,"Portuguese, Brazilian",3,4,0,0,0,0,0 "Дмитрий Хапенков (d.khapenkov)",Russian,5,5,0,6,4,0,2,"2018-01-06 23:00:43"
"Martin Zimdahl (zimdahlmartin)",Swedish,3,2,0,0,1,0,3 "Matthias Joly (joly.matt12)",French,5,8,0,27,1,0,0,"2017-08-28 09:53:59"
"Hiohana Rilary (hiohanarilary)","Portuguese, Brazilian",3,4,0,0,0,0,0 "Micaela Pighin (micaelapiighin)",Spanish,5,6,0,1,0,0,0,"2019-10-09 23:32:42"
"Sarath S (CyberShark)",Tamil,3,7,0,0,0,0,0 andriikozytskyi2018,Ukrainian,5,5,0,0,0,0,0,"2017-09-03 05:24:43"
"Cláudio Bernardo (claudiobernardo.ti)","Portuguese, Brazilian",3,4,0,1,0,0,0 marmo,German,4,4,0,0,0,0,0,"2021-01-13 01:16:35"
"hesamiranii (esam.matouri)",Persian,2,2,0,0,0,0,0 "Eli Besirov (elibesirov07)",Turkish,4,4,0,0,0,0,0,"2019-03-25 07:12:34"
"조화정 (yunjoo337)",Korean,2,2,0,0,0,0,0 "Lopo Isaac Fernández (rocapata)",Spanish,4,3,0,0,0,0,0,"2018-09-20 11:46:22"
"Walid Baazia (walidbaazia2005)",Arabic,2,1,0,0,0,0,0 bziuum,Polish,4,4,0,0,0,0,0,"2020-09-01 09:08:01"
LNDDYL,"Chinese Traditional",2,4,0,0,0,0,2 "Neko123 (emandic11)","Serbian (Cyrillic)",4,4,0,57,0,0,0,"2021-04-21 15:33:29"
REMOVED_USER,Ukrainian,2,2,0,0,0,0,0 Magidxz,Arabic,3,3,0,0,0,0,0,"2021-01-05 05:02:54"
"fatemeh s (fargolseifoori3)",Persian,2,2,0,0,0,0,0 "mohammadali barati (mabaraty)",Persian,3,3,0,0,0,0,0,"2021-07-10 05:54:44"
"أم محمد تقي (souadboudia19)",Arabic,2,2,0,0,0,0,0 "Sarath S (CyberShark)",Tamil,3,7,0,0,0,0,0,"2020-08-27 22:43:16"
"Alex Stein (diefaust1993)",Russian,2,2,0,4,4,0,2 "Unnie Here (Carb)",Hindi,3,8,0,0,0,0,0,"2020-03-18 23:34:35"
"Danial Agh (danialagh)",Persian,2,3,0,0,0,0,0 REMOVED_USER,"Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-11-18 09:02:37"
omerfarukbas,Turkish,2,3,0,19,2,0,0 "Thoum Ptrgnt (thomas.petrignet)",French,3,3,0,2,0,3,0,"2017-09-23 19:25:52"
"Valerij D (vala.dobler)",German,2,2,0,0,0,0,0 "Oleg Kogut (kogut_oleg)",Ukrainian,3,3,0,0,0,0,0,"2018-12-28 14:31:02"
"Naveen jai krishna (njsbpolymer1)",Tamil,2,5,0,0,0,0,0 carsten_kafke,German,3,3,0,43,0,0,3,"2017-10-27 13:27:47"
"Balthazar Aubard (Balatzar)",French,2,5,0,0,1,0,0 "Vagner Roberto (vagner.trompete)","Portuguese, Brazilian",3,3,0,0,0,0,0,"2017-12-30 17:54:26"
"FAy FAy (fayfayfay52)","Chinese Traditional",2,5,0,0,0,0,0 "Igor Piskun (i_piskun)",Ukrainian,3,3,0,0,0,0,0,"2018-01-19 15:20:27"
Soroor_SI,Persian,2,2,0,0,0,0,0 "Andrea Bianchi (andreawhite1597)",Italian,3,1,0,1,0,0,0,"2018-01-21 17:45:48"
chavs1997,Russian,2,2,0,9,0,0,0 "Cláudio Bernardo (claudiobernardo.ti)","Portuguese, Brazilian",3,4,0,1,0,0,0,"2019-01-08 14:41:10"
amei,"Portuguese, Brazilian",2,2,0,0,0,0,0 "Hiohana Rilary (hiohanarilary)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2019-07-31 20:42:20"
"Ilyas Fekhar (il47yas)",Arabic,2,2,0,0,0,0,0 "joabe gabriel (joabegabrielcma1)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-08-21 09:08:59"
"Ali Zaida (alizaeda92)",Arabic,2,2,0,0,0,0,0 "Péter Bernát (bernatp)",Hungarian,3,2,0,0,0,0,0,"2019-11-30 15:50:33"
gnu-ewm,Polish,1,1,0,6,0,0,0 "Martin Zimdahl (zimdahlmartin)",Swedish,3,2,0,0,1,0,3,"2018-09-15 04:39:22"
"Luca Gori (grolcu)",Italian,1,2,0,0,0,0,0 "Gabriel Cavalcante (gabrielc.alves14)","Portuguese, Brazilian",3,4,0,0,0,0,0,"2018-08-06 22:24:54"
"Alan Jeon (skyisle)",Korean,1,2,0,8,0,0,0 atomjani,Hungarian,3,3,0,0,0,0,0,"2019-01-19 00:49:25"
iSoron2,"Portuguese, Brazilian",1,1,0,0,0,0,0 "أم محمد تقي (souadboudia19)",Arabic,2,2,0,0,0,0,0,"2020-06-13 15:24:17"
"Anastasiia Bondarenko (nastasya.bondarenko.97)",Russian,1,1,0,0,0,0,0 "FAy FAy (fayfayfay52)","Chinese Traditional",2,5,0,0,0,0,0,"2017-10-06 08:53:21"
"Patrick Pimenta (trickap1)","Portuguese, Brazilian",1,1,0,0,0,0,0 chavs1997,Russian,2,2,0,9,0,0,0,"2018-05-18 16:58:19"
axd,Spanish,1,1,0,15,0,0,0 Soroor_SI,Persian,2,2,0,0,0,0,0,"2018-06-10 06:28:27"
jonesses,German,1,1,0,1,0,0,1 "Ilyas Fekhar (il47yas)",Arabic,2,2,0,0,0,0,0,"2018-04-17 22:00:41"
"박찌 (perpact20)",Korean,1,1,0,0,0,0,0 "hesamiranii (esam.matouri)",Persian,2,2,0,0,0,0,0,"2018-09-22 16:33:36"
"Kan Black (kanblack.va)",Vietnamese,1,2,0,0,0,1,0 "fatemeh s (fargolseifoori3)",Persian,2,2,0,0,0,0,0,"2019-01-31 12:06:57"
REMOVED_USER,Russian,1,2,0,6,1,0,1 amei,"Portuguese, Brazilian",2,2,0,0,0,0,0,"2018-04-19 19:42:28"
"Wibi Cahyo (wbcahyoh)",Indonesian,1,3,0,0,0,0,0 "Naveen jai krishna (njsbpolymer1)",Tamil,2,5,0,0,0,0,0,"2020-01-10 14:19:41"
"Anton (tT0NG)","Chinese Traditional",1,2,0,0,0,0,1 "Danial Agh (danialagh)",Persian,2,3,0,0,0,0,0,"2019-03-30 13:24:16"
"Maria Fefelova (mashafefel)",Russian,1,1,0,0,0,0,0 "Walid Baazia (walidbaazia2005)",Arabic,2,1,0,0,0,0,0,"2021-01-27 12:47:34"
Itch,,0,0,0,0,0,0,0 "Ali Zaida (alizaeda92)",Arabic,2,2,0,0,0,0,0,"2019-12-01 11:47:00"
"Muhammet Furkan ALMACI (furkan.almaci)",Turkish,0,0,0,1,0,0,0 LNDDYL,"Chinese Traditional",2,4,0,0,0,0,2,"2018-04-22 04:00:19"
Sandhu564.,,0,0,0,0,0,0,0 "Ño Bí Tã (pt614553)",Arabic,2,8,0,1,0,0,0,"2021-05-22 20:41:01"
"Quentin Hibon (hiq)",,0,0,0,0,0,0,0 "Judith Ayala (Azul1612)",Spanish,2,1,0,0,0,1,0,"2021-05-18 17:07:19"
mushin,,0,0,0,0,0,0,0 REMOVED_USER,Ukrainian,2,2,0,0,0,0,0,"2017-06-15 12:24:44"
"Balaji Jayaraman (jkbalaji1103)",,0,0,0,0,0,0,0 "Valerij D (vala.dobler)",German,2,2,0,0,0,0,0,"2018-09-22 09:38:27"
"Wellington Ribeiro (wellington.rib)",,0,0,0,0,0,0,0 "Alex Stein (diefaust1993)",Russian,2,2,0,4,4,0,2,"2017-07-13 06:56:17"
"Javid IRAN (twitteriran98)",Persian,0,0,0,1,0,0,0 "조화정 (yunjoo337)",Korean,2,2,0,0,0,0,0,"2019-06-16 22:25:31"
"박인호 (wphestiraid)",Korean,0,0,0,2,0,0,0 omerfarukbas,Turkish,2,3,0,19,2,0,0,"2017-08-14 16:10:35"
"Ahmed Nazir (ahmednazir333)",,0,0,0,0,0,0,0 "Balthazar Aubard (Balatzar)",French,2,5,0,0,1,0,0,"2017-09-23 01:42:57"
dimateos,,0,0,0,0,0,0,0 "Luca Gori (grolcu)",Italian,1,2,0,0,0,0,0,"2020-09-26 23:26:15"
AhmedDz,Arabic,0,0,0,1,0,0,0 axd,Spanish,1,1,0,15,0,0,0,"2017-09-12 05:48:51"
"reza golestanzadeh (reza.golestanzadeh)",Persian,0,0,0,1,0,0,0 iSoron2,"Portuguese, Brazilian",1,1,0,0,0,0,0,"2017-03-18 17:56:29"
"Petros Bleyan (coolbleyan)",Russian,0,0,0,14,0,0,0 REMOVED_USER,Russian,1,2,0,6,1,0,1,"2019-12-26 05:37:01"
Kamalakannan,,0,0,0,0,0,0,0 "Wibi Cahyo (wbcahyoh)",Indonesian,1,3,0,0,0,0,0,"2017-12-14 06:35:58"
"Dagna Q (dagnaq)",,0,0,0,0,0,0,0 jonesses,German,1,1,0,1,0,0,1,"2021-01-01 08:03:18"
"Thomas Orlita (Thomas995)",Czech,0,0,0,1,0,0,0 "Anton (tT0NG)","Chinese Traditional",1,2,0,0,0,0,1,"2017-07-06 14:18:39"
Fazy1380,,0,0,0,0,0,0,0 "박찌 (perpact20)",Korean,1,1,0,0,0,0,0,"2018-02-10 10:11:44"
"Rivo Zängov (Eraser)",,0,0,0,0,0,0,0 "Alan Jeon (skyisle)",Korean,1,2,0,8,0,0,0,"2018-01-09 10:46:00"
T-v-Gerwen,Dutch,0,0,0,47,0,0,0 "Maria Fefelova (mashafefel)",Russian,1,1,0,0,0,0,0,"2019-05-18 02:03:56"
"عبد الناصر سعيد الثبيتي (asaeed)",,0,0,0,0,0,0,0 "Anastasiia Bondarenko (nastasya.bondarenko.97)",Russian,1,1,0,0,0,0,0,"2019-06-07 17:43:08"
"Edmunds Edmundam (edmundam)",,0,0,0,0,0,0,0 "Kan Black (kanblack.va)",Vietnamese,1,2,0,0,0,1,0,"2019-01-15 03:50:10"
"vi ve (VimalV)",,0,0,0,0,0,0,0 "Patrick Pimenta (trickap1)","Portuguese, Brazilian",1,1,0,0,0,0,0,"2018-12-01 14:31:21"
"LeMeD (LeMeS)",French,0,0,0,2,0,0,0 "Dagna Q (dagnaq)",,0,0,0,0,0,0,0,"2017-08-06 01:42:52"
"Éjbãss Übbeî (littlebittlebottle)",Norwegian,0,0,0,152,0,0,0 Kamalakannan,,0,0,0,0,0,0,0,"2017-05-14 11:40:23"
EmanAmini,,0,0,0,0,0,0,0 "Éjbãss Übbeî (littlebittlebottle)",Norwegian,0,0,0,152,0,0,0,"2017-07-05 21:12:02"
AnggaRifandi,,0,0,0,0,0,0,0 "Равиль Мифтахов (ravilmif47)",Russian,0,0,0,1,0,0,0,"2019-08-12 21:58:30"
"Mateusz Teteruk (mttet)",Polish,0,0,0,1,0,0,0 sanyoniket,,0,0,0,0,0,0,0,"2019-07-23 12:58:40"
"Lori Amico (lavodkaclyde2323)",Italian,0,0,0,1,0,0,0 REMOVED_USER,,0,0,0,0,0,0,0,"2020-02-01 03:47:48"
"Florian Stuhlmann (stuhlmann)",German,0,0,0,10,0,0,0 "vi ve (VimalV)",,0,0,0,0,0,0,0,"2021-02-08 02:35:45"
"Yasin Okumus (lacivert)",Turkish,0,0,0,1,0,0,0 "George Merkulov (george142.emarket)",Russian,0,0,0,11,0,0,0,"2019-06-09 19:47:02"
NairaDNV,Spanish,0,0,0,9,0,0,0 "Yasin Okumus (lacivert)",Turkish,0,0,0,1,0,0,0,"2018-02-07 04:13:51"
REMOVED_USER,,0,0,0,0,0,0,0 "Petros Bleyan (coolbleyan)",Russian,0,0,0,14,0,0,0,"2017-08-18 18:37:18"
farbod66,Persian,0,0,0,1,0,0,0 "LeMeD (LeMeS)",French,0,0,0,2,0,0,0,"2021-02-06 15:35:00"
Raulbertassi,,0,0,0,0,0,0,0 ava_rfie,Persian,0,0,0,1,0,0,0,"2019-06-09 16:19:24"
"Равиль Мифтахов (ravilmif47)",Russian,0,0,0,1,0,0,0 "Mateusz Teteruk (mttet)",Polish,0,0,0,1,0,0,0,"2021-01-23 13:09:59"
"Pumpith Ungsupanit (pumpithu)",,0,0,0,0,0,0,0 EwanB,,0,0,0,0,0,0,0,"2019-11-19 10:04:38"
"Nat Fomicheva (natac)",Russian,0,0,0,3,0,0,0 Fazy1380,,0,0,0,0,0,0,0,"2021-04-10 11:02:53"
EwanB,,0,0,0,0,0,0,0 "Lori Amico (lavodkaclyde2323)",Italian,0,0,0,1,0,0,0,"2017-04-09 10:08:13"
ava_rfie,Persian,0,0,0,1,0,0,0 "Florian Stuhlmann (stuhlmann)",German,0,0,0,10,0,0,0,"2017-04-15 04:04:00"
"George Merkulov (george142.emarket)",Russian,0,0,0,11,0,0,0 "عبد الناصر سعيد الثبيتي (asaeed)",,0,0,0,0,0,0,0,"2018-03-13 02:09:35"
REMOVED_USER,,0,0,0,0,0,0,0 "Rivo Zängov (Eraser)",,0,0,0,0,0,0,0,"2020-10-13 04:38:26"
sanyoniket,,0,0,0,0,0,0,0 Hayder21,,0,0,0,0,0,0,0,"2019-12-31 10:56:24"
"Shuvashish Sahoo (shuvashish76)",,0,0,0,0,0,0,0 T-v-Gerwen,Dutch,0,0,0,47,0,0,0,"2018-03-02 10:26:33"
martyaberger,,0,0,0,0,0,0,0 "Eduard Boboc (edi.boboc33)",Romanian,0,0,0,4,0,0,0,"2019-12-16 09:08:39"
"Карлен Шаухаев (KarlenShaukhaev)",,0,0,0,0,0,0,0 "Samuel Przeździęk (samek22)",Polish,0,0,0,1,0,0,0,"2021-08-01 00:49:01"
"Elmo (oberknecht)",,0,0,0,0,0,0,0 "Saiprasath B (Saiprasath)",,0,0,0,0,0,0,0,"2021-07-11 11:10:41"
Irsgram,Russian,0,0,0,1,0,0,0 shuvo786,,0,0,0,0,0,0,0,"2019-11-13 00:18:12"
"Matus Zdansky (matuszdansky)",,0,0,0,0,0,0,0 "Edmunds Edmundam (edmundam)",,0,0,0,0,0,0,0,"2020-06-01 14:18:18"
shuvo786,,0,0,0,0,0,0,0 Itch,,0,0,0,0,0,0,0,"2017-10-16 09:18:42"
"Eduard Boboc (edi.boboc33)",Romanian,0,0,0,4,0,0,0 "Manny Farsangy (manifarsangi)",Persian,0,0,0,12,0,0,0,"2021-08-10 05:32:28"
Hayder21,,0,0,0,0,0,0,0 "Matus Zdansky (matuszdansky)",,0,0,0,0,0,0,0,"2019-10-20 13:52:24"
AsadullahIlyas,,0,0,0,0,0,0,0 "Thomas Orlita (Thomas995)",Czech,0,0,0,1,0,0,0,"2017-12-24 04:08:27"
"Никита Карамов (nikita.karamoff)",Russian,0,0,0,10,0,0,0 Irsgram,Russian,0,0,0,1,0,0,0,"2019-09-30 16:42:20"
"Katherine Alexandra Flórez Ramírez (katherine.florez12)",Spanish,0,0,0,46,0,0,0 EmanAmini,,0,0,0,0,0,0,0,"2017-03-31 13:27:43"
mdrobulis,,0,0,0,0,0,0,0 mushin,,0,0,0,0,0,0,0,"2020-02-02 04:08:05"
"Eliška Roubalová (roubaeli)",Czech,0,0,0,6,0,0,0 "Elmo (oberknecht)",,0,0,0,0,0,0,0,"2020-04-16 08:45:50"
droidahmed,Arabic,0,0,0,7,0,0,0 AnggaRifandi,,0,0,0,0,0,0,0,"2017-03-31 19:28:35"
"Arjun K. (arjunkdot)",,0,0,0,0,0,0,0 "darkkingredian (rediancool)",,0,0,0,0,0,0,0,"2021-07-27 16:04:32"
"Sarah BCNN (fsarahboucenna)",French,0,0,0,16,0,0,0 "Sri Harsha Bhogi (sriharshabhogi)",,0,0,0,0,0,0,0,"2018-09-02 05:31:53"
REMOVED_USER,Czech,0,0,0,18,0,0,0 "Nat Fomicheva (natac)",Russian,0,0,0,3,0,0,0,"2019-01-25 14:35:02"
BongTran,Vietnamese,0,0,0,2,0,0,0 mdrobulis,,0,0,0,0,0,0,0,"2018-05-24 01:40:42"
"Arttu Ylhävuori (arttu.ylhavuori)",,0,0,0,0,0,0,0 "Sarah BCNN (fsarahboucenna)",French,0,0,0,16,0,0,0,"2018-02-11 11:07:36"
valney.faria,"Portuguese, Brazilian",0,0,0,1,0,0,0 "Arjun K. (arjunkdot)",,0,0,0,0,0,0,0,"2020-09-20 11:16:18"
REMOVED_USER,,0,0,0,0,0,0,0 REMOVED_USER,Czech,0,0,0,18,0,0,0,"2018-03-27 06:19:52"
rooban23,,0,0,0,0,0,0,0 martyaberger,,0,0,0,0,0,0,0,"2019-01-01 18:48:08"
REMOVED_USER,,0,0,0,0,0,0,0 BongTran,Vietnamese,0,0,0,2,0,0,0,"2018-04-24 05:16:07"
"Алтынбек Наурызғали (altinbeknaurizgali)",Russian,0,0,0,1,0,0,0 "Arttu Ylhävuori (arttu.ylhavuori)",,0,0,0,0,0,0,0,"2019-07-24 15:03:42"
"Sri Harsha Bhogi (sriharshabhogi)",,0,0,0,0,0,0,0 "Никита Карамов (nikita.karamoff)",Russian,0,0,0,10,0,0,0,"2018-10-29 03:57:21"
"Ahnaf Tajwar (atn4404)",,0,0,0,0,0,0,0 rooban23,,0,0,0,0,0,0,0,"2020-09-15 11:49:14"
Elham1361,,0,0,0,0,0,0,0 "Eliška Roubalová (roubaeli)",Czech,0,0,0,6,0,0,0,"2019-12-31 12:47:29"
dongchen.yue,German,0,0,0,4,0,0,0 valney.faria,"Portuguese, Brazilian",0,0,0,1,0,0,0,"2020-02-02 14:45:02"
philfr49,French,0,0,0,2,0,0,0 "Алтынбек Наурызғали (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"

1 Name Languages Translated (Words) Target Words Approved (Words) Voted "+" votes received "-" votes received Winning (Words) Joined
2 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 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 14790 14808 17211 17227 1272 1282 0 1707 1779 70 80 4259 4274 2016-03-05 18:35:27
3 Slobodan Simić (Слободан Симић) (slsimic) Serbian (Latin); Serbian (Cyrillic) 2053 2054 1830 1831 2105 2114 12 33 0 1982 1991 2021-02-03 14:26:07
4 Oglaigh Rystard (oglaignaheireann) Ukrainian; Portuguese; Catalan; Greek; Basque; Romanian; Italian 1103 1037 1327 1 13 6 954 2017-03-31 09:13:19
5 David (Cliff122) Swedish 1040 1019 725 6 0 0 700 2020-01-21 13:56:55
6 dukelc Omer I.S. (omeritzics) Slovak Hebrew 919 1000 880 900 0 1097 0 14 0 1 0 0 946 2020-10-11 20:10:51
7 KMakoto dukelc Chinese Traditional Slovak 745 919 1146 880 949 0 0 0 0 745 0 2020-08-27 14:02:41
8 Evren (evrenkiymaz) Intan Ayunda (Intan_Ayunda) Turkish Indonesian 688 800 604 793 0 962 71 0 4 0 0 0 711 2020-10-14 07:51:58
9 David Nos (david.nos) KMakoto Catalan; Spanish Chinese Traditional 667 745 731 1146 0 949 0 0 0 0 745 2019-10-22 04:19:52
10 androide74 Evren (evrenkiymaz) Italian Turkish 644 688 659 604 0 2 71 0 5 0 1 0 2020-10-04 03:39:16
11 Tomairuka David Nos (david.nos) Japanese Catalan; Spanish 633 667 1636 731 909 0 43 0 0 1 0 564 0 2020-01-04 10:15:36
12 Dmitriy Bogdanov (di72nn) Antti Kallio (antti.kallio) Russian Finnish 625 650 572 525 1175 0 0 34 0 0 519 0 2021-07-03 05:54:44
13 reyhoon androide74 Persian Italian 624 644 759 659 0 1 2 1 0 0 0 2020-02-06 15:46:28
14 Osoitz Tomairuka Basque Japanese 610 633 545 1636 0 909 9 43 0 0 3 564 2020-12-12 12:14:22
15 fabian.bouchal Dmitriy Bogdanov (di72nn) German Russian 548 625 527 572 0 1197 6 0 0 36 3 0 72 515 2017-03-31 10:00:48
16 boban77 reyhoon Czech Persian 509 624 461 759 0 2 1 0 3 0 1 0 2020-10-01 18:17:23
17 Yoav Argov (YoavArgov) Osoitz Hebrew Basque 501 610 461 545 0 0 9 1 0 8 0 3 2018-01-23 14:07:47
18 REMOVED_USER Saeed Esmaili (saaeed.es20) Norwegian Persian 501 568 498 774 501 0 0 5 148 4 0 501 0 2020-11-26 15:41:15
19 Martim Parente (Sharlimar) fabian.bouchal Portuguese German 497 548 534 527 0 38 6 0 0 3 0 72 2020-01-07 06:43:37
20 chrrris1987 (Chrrris1987) boban77 Dutch Czech 467 509 478 461 0 23 2 0 0 0 2020-04-30 13:18:24
21 Huy Ngo (huyngo) Yoav Argov (YoavArgov) Vietnamese Hebrew 461 501 695 461 0 1 0 0 1 0 8 0 103 2017-04-28 07:23:01
22 黄克 (hk13127) REMOVED_USER Chinese Simplified Norwegian 461 501 765 498 0 501 1 0 0 148 0 0 501 2017-07-05 19:02:25
23 Arkadiusz Bubak (epitek) Martim Parente (Sharlimar) Polish Portuguese 458 497 416 534 29 0 24 38 0 3 0 0 2020-08-26 10:22:11
24 marco.baturan chrrris1987 (Chrrris1987) Esperanto Dutch 452 467 452 478 0 0 23 0 0 0 2020-02-03 05:26:04
25 Sief Tarek (sieftarek135) Huy Ngo (huyngo) Arabic Vietnamese 447 461 455 695 0 0 1 0 0 0 2020-01-26 11:58:36
26 Omer I.S. (omeritzics) 黄克 (hk13127) Hebrew Chinese Simplified 428 461 366 765 0 14 1 1 0 0 0 24 2020-01-17 23:16:03
27 Samuel Guay (SamGuay) Arkadiusz Bubak (epitek) French Polish 426 458 486 416 0 29 6 24 0 0 3 0 2020-11-05 05:11:58
28 Diana Karaseva (Sun_Dianka) marco.baturan Russian Esperanto 399 452 373 452 0 10 0 1 0 0 221 0 2020-06-23 02:49:46
29 Alexander Jansson (dalecarlian) Sief Tarek (sieftarek135) Swedish Arabic 396 447 406 455 507 0 0 0 3 0 399 0 2021-02-07 14:35:21
30 luiandresgonzalez Samuel Guay (SamGuay) Spanish French 383 426 403 486 0 1 6 0 0 0 2020-06-25 07:14:38
31 Thamara Andrade (tkcandrade) Diana Karaseva (Sun_Dianka) Portuguese, Brazilian Russian 380 399 387 373 0 0 10 1 0 252 209 2020-01-30 06:40:02
32 Sølv Ræven (soelvraeven) Alexander Jansson (dalecarlian) Danish Swedish 370 396 370 406 0 507 0 0 0 3 0 399 2017-06-21 01:37:32
33 Isti (eisti) luiandresgonzalez Hungarian Spanish 367 383 329 403 0 0 1 0 28 0 0 2020-07-11 14:20:44
34 Anh Quân (dangquanuet) Thamara Andrade (tkcandrade) Vietnamese Portuguese, Brazilian 362 380 530 387 0 42 0 1 0 0 252 2020-01-09 19:35:48
35 gapszi Sølv Ræven (soelvraeven) Hungarian Danish 348 370 301 370 0 86 0 0 0 0 2020-11-28 16:46:18
36 Mahdi Nasiri (mahdi.nasiri) Isti (eisti) Persian Hungarian 343 367 465 329 0 39 0 3 0 0 0 2020-12-03 12:02:51
37 Seoyul Anh Quân (dangquanuet) Korean Vietnamese 339 362 825 530 0 0 42 27 2 0 0 2017-10-29 12:27:44
38 Magimai Prakasam (magimai) gapszi Tamil Hungarian 336 348 831 301 0 12 86 0 0 0 2019-04-08 01:35:54
39 Michael Malak (MichaelKMalak) JY3 Arabic Chinese Simplified 304 345 271 585 0 278 0 0 1 0 0 207 2021-03-08 08:53:35
40 Elina Salminen (salminen.elina.m) Mahdi Nasiri (mahdi.nasiri) Finnish Persian 297 343 227 465 0 0 39 0 3 0 1 0 2017-07-14 09:17:25
41 ayane.m Seoyul Japanese Korean 292 339 863 825 0 1 0 2 27 0 22 0 2017-06-21 08:11:39
42 Marius Teufelweich (teufelweich) Magimai Prakasam (magimai) German Tamil 249 336 256 831 606 0 4 12 0 0 146 0 2018-04-15 21:16:08
43 cobalt59 Michael Malak (MichaelKMalak) German Arabic 237 304 234 271 0 1 0 23 0 1 0 132 0 2020-05-26 19:47:58
44 QWERT (lurenjia01) Elina Salminen (salminen.elina.m) Chinese Simplified Finnish 236 297 407 227 0 0 0 0 0 2021-01-06 01:28:57
45 beriain ayane.m Basque Japanese 234 292 235 863 0 0 1 2 3 0 0 22 2019-11-20 03:28:26
46 Intan Ayunda (Intan_Ayunda) Blinkin Indonesian Dutch 228 284 239 318 336 0 0 1 0 0 135 0 2021-06-14 10:30:05
47 pnhpnh Marius Teufelweich (teufelweich) Vietnamese German 225 249 343 256 0 606 1 4 3 2 0 0 146 2021-03-12 04:11:38
48 Dika Fitrian Dwi Putra (OsamuDazai) cobalt59 Indonesian German 221 237 215 234 0 0 1 0 24 0 1 33 132 2017-06-05 05:18:33
49 easyrepro QWERT (lurenjia01) Telugu Chinese Simplified 214 236 297 407 0 0 0 8 0 0 19 2020-03-08 01:46:25
50 taras-ko beriain Ukrainian Basque 211 234 183 235 0 1 0 4 2 0 19 0 2017-03-31 15:42:28
51 sojusnik pnhpnh German Vietnamese 207 225 200 343 1 0 0 1 30 3 0 66 0 2017-11-27 12:06:07
52 axmed99 Dika Fitrian Dwi Putra (OsamuDazai) Ukrainian Indonesian 203 221 177 215 0 40 0 0 0 53 48 2020-07-13 04:40:27
53 Heru Yen (heruyen) easyrepro Indonesian Telugu 201 214 201 297 0 0 0 0 2 0 2020-06-12 12:52:10
54 Ishmaeel taras-ko Turkish Ukrainian 193 211 174 183 0 129 1 6 4 0 0 19 2017-10-26 16:52:22
55 fbruna17 sojusnik Danish German 181 207 179 200 0 1 1 0 0 30 0 0 66 2017-04-03 17:11:56
56 Omry Cohen (omrycohen) axmed99 Hebrew Ukrainian 175 203 156 177 0 1 40 0 0 0 53 2021-04-01 03:56:20
57 Bryanx Heru Yen (heruyen) Dutch Indonesian 174 201 165 201 0 5 0 0 0 0 25 2020-06-29 18:39:15
58 Pierre GALIEGUE (pierre.galiegue) Vijaykumar Borkar (vjkumar) French Hindi 171 200 194 364 0 24 11 2 0 0 0 2021-08-06 16:12:15
59 DionysosDV Ishmaeel Greek Turkish 165 193 153 174 0 0 129 0 6 0 0 2017-10-04 03:54:00
60 Gustavo Lima (GustavoLima) Aputsiak Niels Janussen (aputtu) Portuguese Danish 158 187 177 200 0 1 0 4 0 10 0 0 2019-08-28 05:47:42
61 Aputsiak Niels Janussen (aputtu) _translator Danish French 153 181 171 206 0 0 11 0 0 0 2021-07-06 07:54:12
62 plitwin fbruna17 Polish Danish 145 181 128 179 0 1 16 0 0 26 0 2021-01-28 15:48:47
63 Lương Vĩnh Khang (LuongVinhKhang) Omry Cohen (omrycohen) Vietnamese Hebrew 144 175 256 156 0 0 1 46 0 1 0 0 33 2021-01-18 07:33:23
64 azzamsa Bryanx Indonesian Dutch 142 174 136 165 0 48 5 0 1 0 50 0 2019-11-21 17:08:12
65 Neysa Nasywa (neysanasywa) Pierre GALIEGUE (pierre.galiegue) Indonesian French 140 171 141 194 0 0 24 0 4 0 35 0 2020-08-16 11:41:35
66 JY3 bruhwut Chinese Simplified Vietnamese 136 171 217 268 80 0 0 1 0 0 80 0 2021-05-21 07:16:30
67 Mohammed Imthath (mimthath4) DionysosDV Tamil Greek 136 165 274 153 0 0 11 0 0 0 2021-02-27 19:05:25
68 roptat Gustavo Lima (GustavoLima) French Portuguese 132 158 154 177 0 112 1 88 4 5 10 0 2020-08-26 10:35:05
69 Trần Thái (tranhoangthai2001) oscfd Vietnamese Spanish 127 155 186 166 0 8 1 1 4 0 0 2021-05-21 17:58:22
70 OP Smosher (teenwolffan44) plitwin Serbian (Cyrillic) Polish 124 145 122 128 0 0 1 0 16 0 18 26 2021-01-20 06:18:37
71 4001982248998 Lương Vĩnh Khang (LuongVinhKhang) Esperanto Vietnamese 122 144 119 256 0 0 0 46 0 1 0 2017-08-10 10:05:58
72 StoP4Me (Lcqp) azzamsa Romanian Indonesian 121 142 119 136 0 0 48 3 0 0 1 0 26 2017-06-16 18:29:45
73 Sebastian05067 yoding (yodingc) Spanish Chinese Traditional; Chinese Simplified 114 141 133 271 0 55 10 18 0 0 0 2021-07-07 01:45:45
74 Tanya (MagicUnderHood) Neysa Nasywa (neysanasywa) Russian Indonesian 114 140 98 141 0 19 0 0 0 32 60 2020-11-18 10:32:10
75 REMOVED_USER Mohammed Imthath (mimthath4) Arabic Tamil 111 136 106 274 0 22 0 21 11 2 0 0 2018-02-15 22:41:15
76 mohmans roptat Arabic French 109 132 103 154 0 2 112 0 89 0 5 0 2017-04-19 16:54:47
77 Ivan Krušlin (krux3r) Trần Thái (tranhoangthai2001) Croatian Vietnamese 108 127 122 186 503 0 0 8 0 1 0 108 0 2018-03-01 10:51:39
78 Iabin Arteaga (iabin) OP Smosher (teenwolffan44) Spanish Serbian (Cyrillic) 108 124 111 122 0 4 0 20 0 0 0 18 2020-11-05 09:41:35
79 2kaafone 4001982248998 Finnish Esperanto 105 122 90 119 0 0 0 0 0 2017-10-08 04:13:02
80 Adam Jurkiewicz (hasztagg) StoP4Me (Lcqp) Polish Romanian 104 121 105 119 529 0 0 0 3 0 104 0 2018-05-06 18:51:59
81 Saeed Esmaili (saaeed.es20) alalloush Persian Arabic 104 118 141 129 0 0 2 0 2 0 0 2017-03-31 12:37:17
82 just a name bro (justanamebr0) Eilif Adelvice (adelvice) Danish Spanish 98 116 109 126 0 0 96 1 0 0 0 2021-08-05 07:20:21
83 Nam Nguyen (namnl2706) Sebastian05067 Vietnamese Spanish 95 114 137 133 0 0 55 0 28 0 0 2017-05-14 00:48:16
84 손유정 (yuwon1213) Tanya (MagicUnderHood) Korean Russian 95 114 57 98 0 0 19 0 0 0 54 2019-04-21 10:44:03
85 ranmagen REMOVED_USER Hebrew Arabic 91 111 78 106 0 0 22 0 21 0 2 0 2018-01-05 07:01:45
86 LoneWanderer mohmans Chinese Traditional Arabic 90 109 137 103 0 4 2 0 0 0 2020-11-23 02:48:00
87 Vo - (voyl) Iabin Arteaga (iabin) Chinese Traditional Spanish 89 108 126 111 0 0 4 5 21 0 0 2017-08-26 21:08:54
88 ikkaz Ivan Krušlin (krux3r) Indonesian Croatian 89 108 84 122 0 503 5 0 0 0 4 108 2017-03-31 09:15:24
89 Irene K (Heaun) 2kaafone Korean Finnish 88 105 75 90 0 25 0 0 0 0 2019-08-12 06:58:48
90 Kumar Anand (kumar0500) Adam Jurkiewicz (hasztagg) Hindi Polish 87 104 125 105 0 529 0 0 0 0 104 2017-03-31 09:50:51
91 Prosta4ok_ua just a name bro (justanamebr0) Ukrainian Danish 87 98 84 109 0 1 0 0 1 0 17 0 2019-06-19 11:57:55
92 Ohad Edri (ohadalte) Nam Nguyen (namnl2706) Hebrew Vietnamese 85 95 79 137 0 0 1 0 3 0 0 2020-08-18 23:02:33
93 helectron 손유정 (yuwon1213) Persian Korean 84 95 102 57 0 1 0 0 0 0 2021-03-30 05:25:33
94 Radu Cebotari (wildProgrammer) ranmagen Romanian Hebrew 84 91 92 78 0 1 0 0 0 0 2021-02-16 05:44:31
95 Israa Z (sosozozo) LoneWanderer Arabic Chinese Traditional 79 90 87 137 0 43 4 11 0 0 3 0 2020-09-29 05:24:48
96 Sofia Neves (sofiasonev) Vo - (voyl) Portuguese, Brazilian Chinese Traditional 79 89 84 126 0 1 0 0 5 0 46 0 2020-09-02 23:34:42
97 Tiralka ikkaz French Indonesian 79 89 91 84 0 92 5 1 0 0 0 4 2019-09-02 19:58:54
98 Jacob Roller (jdr28070) Irene K (Heaun) Korean 79 88 61 75 0 0 25 0 0 0 2020-03-16 11:31:12
99 Toni Mustonen (toni.mustonen) Prosta4ok_ua Finnish Ukrainian 78 87 72 84 0 0 1 0 0 0 17 2020-01-23 19:43:41
100 Michael (quelbs) Kumar Anand (kumar0500) German Hindi 76 87 75 125 0 1 0 0 0 39 0 2020-11-07 02:46:09
101 Fauz Aladeem (topfauz) Ohad Edri (ohadalte) Arabic Hebrew 76 85 77 79 0 0 0 1 1 3 0 18 2020-07-04 03:42:09
102 RealDonald helectron Dutch Persian 67 84 69 102 0 121 1 10 0 0 0 2021-03-02 04:10:51
103 sirekanyan Radu Cebotari (wildProgrammer) Armenian; Russian Romanian 66 84 65 92 0 0 1 0 0 0 2020-02-05 01:20:00
104 Константин К. (kocyak1991) Sofia Neves (sofiasonev) Russian Portuguese, Brazilian 64 79 60 84 0 0 1 1 0 2 0 0 46 2020-03-12 18:19:46
105 Laura Sophie (laurasophie20) Jacob Roller (jdr28070) German Korean 62 79 67 61 0 4 0 0 0 0 2020-01-03 11:36:40
106 raden20 Tiralka Indonesian French 61 79 62 91 177 0 0 92 1 0 64 0 2018-02-09 18:39:01
107 Jan Wojtecki (j4nw) Israa Z (sosozozo) Polish Arabic 58 79 46 87 0 0 43 0 12 0 26 3 2017-11-27 14:10:50
108 Deepak Bharathi (deepakbharathi1994) Toni Mustonen (toni.mustonen) Tamil Finnish 56 78 107 72 0 0 11 0 4 0 0 2017-09-02 05:34:12
109 Андрій Козицький (andriikozytskyi1108) Fauz Aladeem (topfauz) Ukrainian Arabic 52 76 52 77 0 0 1 0 0 1 0 2020-02-21 22:46:12
110 REMOVED_USER Michael (quelbs) Italian German 51 76 52 75 0 2 1 0 0 0 39 2020-08-18 07:39:26
111 govindap Oliver Gronowski (OliverGronowski) Japanese; Hindi German 51 70 114 69 0 6 5 1 0 0 0 2021-05-14 16:37:10
112 Mare Geldenhuys (mare.geldenhuys) RealDonald Afrikaans Dutch 50 67 57 69 0 0 121 0 10 0 0 2017-06-23 20:10:12
113 Peter Williams (williamspete001) sirekanyan Japanese Armenian; Russian 49 66 133 65 0 1 0 0 0 3 0 2020-04-18 11:32:52
114 Behnood HRazy (behnoodhr) Константин К. (kocyak1991) Persian Russian 49 64 70 60 0 0 0 1 0 2 0 2018-06-10 13:39:37
115 J3ll3nl Laura Sophie (laurasophie20) Dutch German 48 62 48 67 0 0 4 17 0 1 0 3 0 2018-01-06 14:21:24
116 tat bz (Tat_i) Alparslan Sakci (sakci) German Turkish 48 61 56 55 0 55 11 0 0 27 0 2021-06-10 11:59:22
117 vach raden20 Armenian Indonesian 47 61 36 62 0 177 0 0 1 0 0 64 2017-04-09 22:04:23
118 andowero Jan Wojtecki (j4nw) Czech Polish 47 58 38 46 0 0 0 0 0 26 2017-11-02 05:42:14
119 Andrew Firnes (Anechan) Deepak Bharathi (deepakbharathi1994) Russian Tamil 47 56 47 107 0 3 0 0 11 0 4 29 0 2017-09-17 08:00:31
120 Coni Ragni (coni2ragnii) Peter Williams (williamspete001) Spanish Japanese 46 55 46 147 0 0 2 0 0 0 3 2020-01-01 13:17:44
121 Rahul Shishodia (rahul.shishodia.10) Андрій Козицький (andriikozytskyi1108) Hindi Ukrainian 46 52 85 52 0 6 0 0 1 0 0 2018-10-22 01:45:08
122 Cp0204 Nil riera (nilriera2000) Chinese Simplified Catalan 45 52 72 61 0 0 1 0 0 0 2021-06-22 16:37:44
123 cc (cavaz) REMOVED_USER Italian 44 51 41 52 0 0 2 0 0 0 2017-08-21 05:15:31
124 Kamil Dziadek (prso94) govindap Polish Japanese; Hindi 43 51 39 114 0 0 6 2 1 0 0 2020-06-02 20:15:52
125 Boban Jagertraum (boban40) Mare Geldenhuys (mare.geldenhuys) Czech Afrikaans 43 50 38 57 0 2 0 1 0 1 0 0 2017-10-20 18:00:14
126 andreea.muscalagiu Behnood HRazy (behnoodhr) Romanian Persian 42 49 52 70 0 1 0 0 0 0 2017-11-25 10:57:21
127 Me Me (gentelwom) tat bz (Tat_i) Arabic German 42 48 40 56 0 0 55 0 0 0 27 2021-03-26 05:12:54
128 Balázs Keresztury (belidzs) J3ll3nl Hungarian Dutch 42 48 41 48 501 0 0 7 17 0 1 38 3 2017-03-31 11:56:09
129 MStefanov Andrew Firnes (Anechan) Bulgarian Russian 41 47 55 47 2 0 0 3 2 0 0 2 29 2019-09-18 09:51:59
130 Ali Zali (stm19951995) andowero Persian Czech 40 47 60 38 0 0 0 0 0 2020-01-20 02:29:01
131 Sofia Veijonen (Suklaa) (sofia.veijonen) vach Finnish Armenian 40 47 33 36 0 0 0 0 0 2020-04-18 16:53:12
132 dusanstrgar Rahul Shishodia (rahul.shishodia.10) Slovenian Hindi 39 46 41 85 0 0 6 0 5 0 1 0 2018-12-24 22:18:19
133 Limin Lu (liminlu) Coni Ragni (coni2ragnii) Chinese Simplified Spanish 39 46 79 46 503 0 0 0 0 39 0 2021-02-28 20:18:37
134 Anshoe Cp0204 Tamil Chinese Simplified 38 45 65 72 0 14 0 0 0 0 2019-08-20 11:04:27
135 anasshm cc (cavaz) Arabic Italian 37 44 36 41 0 9 0 0 0 0 2017-04-01 04:21:08
136 hrexen Boban Jagertraum (boban40) Armenian Czech 37 43 37 38 0 0 2 0 1 0 1 0 2017-03-31 09:39:16
137 REMOVED_USER Kamil Dziadek (prso94) Swedish Polish 36 43 33 39 0 5 0 1 2 0 0 2020-04-06 17:12:06
138 Abdulrahman (D7M) Me Me (gentelwom) Arabic 36 42 39 40 0 0 0 0 0 2020-11-08 20:44:01
139 長谷川知里 (chase0213) Ali Elsheikh (aelsheikh1987) Japanese Arabic 34 42 138 41 0 13 0 0 0 24 0 2021-06-16 10:17:26
140 Piotr Łuczyński (peterluczynski) Balázs Keresztury (belidzs) Polish Hungarian 33 42 30 41 0 501 6 0 5 7 0 2 38 2017-04-06 02:40:24
141 milad farahani (miladfarmahini90) andreea.muscalagiu Persian Romanian 33 42 44 52 0 18 1 0 0 3 0 2017-10-22 07:19:49
142 Luis E. Perichon (luisperichon) Mateusz Duda (MateuszDuda) Spanish Polish 33 42 40 42 0 104 0 0 0 0 2021-08-17 11:27:11
143 andriikozytskyi2625 MStefanov Ukrainian Bulgarian 31 41 23 55 0 2 0 0 2 0 0 2 2017-03-31 16:09:02
144 JoeLi Sofia Veijonen (Suklaa) (sofia.veijonen) Chinese Traditional Finnish 31 40 70 33 0 12 0 0 0 24 0 2018-03-07 09:24:22
145 Moastafa Ali Zali (stm19951995) Arabic Persian 31 40 25 60 0 0 0 0 0 2020-03-23 19:57:26
146 REMOVED_USER Limin Lu (liminlu) Russian Chinese Simplified 31 39 30 79 0 503 2 0 4 0 0 3 39 2017-03-31 09:49:35
147 hamza gamal (hamzagamal4444) dusanstrgar Arabic Slovenian 31 39 28 41 0 0 0 0 0 2017-03-31 10:30:28
148 yancyn Anshoe Chinese Simplified Tamil 30 38 40 65 0 0 14 0 0 0 2018-01-02 11:06:52
149 비니몬youtube (khj01025276475) anasshm Korean Arabic 29 37 25 36 0 0 9 0 0 0 2019-01-27 04:07:22
150 Ruud Schouten (ruudschouten) hrexen Dutch Armenian 29 37 32 37 0 41 0 3 0 0 0 2020-12-09 02:30:34
151 Guillaume Collic (gcollic) Abdulrahman (D7M) French Arabic 26 36 28 39 0 126 0 11 0 0 0 2020-01-29 18:55:30
152 Niraj Yadav (neverforgetniraj) Maria Chushnyakova (maria.ch) Hindi Russian 26 36 48 31 0 0 3 0 0 0 2021-08-17 03:23:58
153 Radoslaw Biernacki (radoslaw.biernacki) REMOVED_USER Polish Swedish 26 36 24 33 0 8 5 0 1 0 1 0 2018-09-29 17:47:33
154 Jonny I (jonny99dj) 長谷川知里 (chase0213) Italian Japanese 26 34 26 138 0 5 13 0 0 0 24 2018-12-14 10:52:44
155 Aaron Dalton (Perlkonig) Luis E. Perichon (luisperichon) French Spanish 26 33 25 40 0 141 104 1 0 0 0 2017-09-04 13:46:06
156 Eddie (eddieattaboy) Piotr Łuczyński (peterluczynski) Chinese Traditional Polish 25 33 34 30 0 1 6 0 5 0 0 2 2020-01-29 07:27:40
157 Pan_Filuta milad farahani (miladfarmahini90) Czech Persian 25 33 21 44 0 5 18 4 1 0 3 2017-08-31 16:09:00
158 eduard83 (barbany.eduard) andriikozytskyi2625 Catalan Ukrainian 24 31 25 23 0 2 0 0 0 0 2019-07-08 00:16:41
159 Ľuboš Čaky (lubos.caky) Moastafa Slovak Arabic 23 31 22 25 0 0 0 0 0 2020-07-06 11:37:53
160 Caner Başaran (basarancaner) hamza gamal (hamzagamal4444) Turkish Arabic 23 31 21 28 0 0 20 0 0 0 2020-08-03 15:23:34
161 hodanli REMOVED_USER Turkish Russian 22 31 26 30 0 0 2 1 4 0 0 3 2018-12-03 23:55:47
162 Neeraj Verma (verma.neeraj.in) JoeLi Hindi Chinese Traditional 22 31 37 70 0 0 12 1 0 0 0 24 2017-06-25 05:32:48
163 Alcarkse (alexis.brusle) yancyn French Chinese Simplified 21 30 25 40 0 7 0 11 0 0 0 1 2020-05-18 20:06:03
164 Shashwat (goforgold) 비니몬youtube (khj01025276475) Hindi Korean 20 29 33 25 0 0 0 0 0 2020-02-09 20:44:35
165 사자솥 (toke1597) Ruud Schouten (ruudschouten) Korean Dutch 19 29 19 32 0 0 41 0 3 0 0 2017-07-22 17:49:17
166 İsa Eş (IsaEs) Aaron Dalton (Perlkonig) Turkish French 19 26 17 25 0 0 141 6 1 1 0 0 2018-01-14 12:58:19
167 sheeCesu Niraj Yadav (neverforgetniraj) French Hindi 19 26 18 48 0 48 0 2 0 0 0 2017-04-11 02:26:50
168 can13 Guillaume Collic (gcollic) Turkish French 19 26 14 28 0 8 126 0 11 0 0 2017-05-05 16:13:00
169 Magdalena Urbańczyk (madziia139) Radoslaw Biernacki (radoslaw.biernacki) Polish 19 26 19 24 0 0 8 0 0 0 1 2020-12-15 17:55:31
170 axikman11111 Jonny I (jonny99dj) Uyghur Italian 18 26 19 26 0 0 5 0 0 0 2017-10-07 07:35:34
171 Adeline31 Eddie (eddieattaboy) French Chinese Traditional 17 25 20 34 0 3 1 0 0 0 2020-11-04 21:48:05
172 Hoon Jung (hooni100) Pan_Filuta Korean Czech 17 25 10 21 0 0 5 0 4 0 0 3 2017-04-29 12:55:14
173 Ceara Lopez (cealopez) eduard83 (barbany.eduard) Spanish Catalan 17 24 18 25 0 0 2 5 0 1 0 0 2019-06-26 14:59:47
174 takoyakibento Ľuboš Čaky (lubos.caky) Korean Slovak 17 23 13 22 0 3 0 0 0 0 2019-07-02 16:51:44
175 bretzel15 Caner Başaran (basarancaner) German Turkish 16 23 20 21 0 0 0 21 0 0 2017-04-09 06:34:59
176 engineeringforgood hodanli Russian Turkish 16 22 15 26 0 0 0 1 0 0 2017-11-03 14:33:41
177 Şamil Ateşoğlu (m.samilatesoglu) gnu-ewm Turkish Polish 16 22 22 23 0 11 6 6 0 3 0 0 2021-02-24 03:42:01
178 DebatablySane Neeraj Verma (verma.neeraj.in) Bulgarian Hindi 16 22 15 37 0 48 0 0 1 0 0 2018-07-23 07:16:41
179 Bhava Tharini (bhavidanush) Alcarkse (alexis.brusle) Tamil French 15 21 37 25 0 0 7 0 11 0 0 2017-08-06 09:32:29
180 Anastasia Borchuk (al2.borchuk) olbotta Russian Italian 14 20 14 25 0 0 2 0 0 0 2021-06-06 04:22:55
181 EuiHo Hwang (euiho.hwang) Shashwat (goforgold) Korean Hindi 14 20 16 33 0 0 0 0 0 2020-05-17 10:34:42
182 iamsurajbobade Magdalena Urbańczyk (madziia139) Hindi Polish 14 19 30 19 0 0 0 0 0 2017-10-21 03:01:04
183 Zeynep Esen (nezihaesen50) sheeCesu Turkish French 14 19 13 18 0 0 48 0 4 0 0 2017-12-21 17:01:39
184 Fikret Bilici (fikretbilici) can13 Turkish 14 19 13 14 0 0 8 0 0 0 2021-01-03 10:39:03
185 Zeeshan Rabbani (Zeera) İsa Eş (IsaEs) Hindi Turkish 14 19 25 17 0 0 0 6 0 1 0 2017-06-20 07:30:22
186 Sanji Vinsmock (mukanzhanbolat4) 사자솥 (toke1597) Russian Korean 14 19 14 19 0 0 0 0 0 2020-02-04 13:36:11
187 Nenad Vukotic (vukotic.nenad) axikman11111 Serbian (Cyrillic) Uyghur 13 18 13 19 0 1 0 2 0 6 0 0 2018-10-13 12:25:31
188 Uwe Mönks (schirinowski) Hoon Jung (hooni100) German Korean 13 17 12 10 0 0 0 0 0 2021-01-03 02:26:54
189 Dave (xdave) Ceara Lopez (cealopez) Hungarian Spanish 13 17 11 18 0 0 0 5 0 1 0 2017-08-22 22:56:13
190 soura2 takoyakibento Arabic Korean 12 17 13 0 0 3 0 0 0 2020-08-01 08:44:15
191 shreyas (techiespace) Adeline31 Hindi French 12 17 20 0 0 3 0 0 0 2019-12-06 00:00:11
192 Jo Chuang (josephch405) engineeringforgood Chinese Traditional Russian 11 16 24 15 0 0 0 0 11 16 2021-01-22 03:32:35
193 Vmrc bretzel15 French German 11 16 12 20 0 2 0 0 0 0 2020-04-06 02:49:14
194 sathvic k (sathvictripleseven) Şamil Ateşoğlu (m.samilatesoglu) Telugu Turkish 10 16 17 22 0 0 11 0 6 0 3 0 2017-07-05 18:37:08
195 Edwin van Rooij (edwinvrooij) DebatablySane Dutch Bulgarian 10 16 13 15 0 17 48 0 0 0 2017-07-10 15:13:18
196 Brian Camacho (bmcamacho) Bhava Tharini (bhavidanush) Polish Tamil 10 15 11 37 0 0 1 0 0 0 2019-10-09 05:43:11
197 Ahmed Mosaad (ahmed.mosaad2018) Zeynep Esen (nezihaesen50) Arabic Turkish 10 14 12 13 0 6 0 0 0 0 2020-01-28 07:05:15
198 Mihael Wagner (miha.wagner) Fikret Bilici (fikretbilici) Slovenian Turkish 10 14 9 13 0 7 0 0 0 0 2020-06-21 17:16:11
199 Anonymous edgy nerd (yamentaad) EuiHo Hwang (euiho.hwang) Arabic Korean 10 14 13 16 0 1 0 0 0 0 2020-06-23 02:40:01
200 Martin Vostatek (martinvostatek) Zeeshan Rabbani (Zeera) Czech Hindi 9 14 8 25 0 32 0 2 0 0 0 2020-09-15 11:32:01
201 Sourire Lucide (sourire_lucide) Faiz Ahamed (faiznewton) Russian Tamil 9 14 10 31 0 0 1 0 0 0 2021-05-06 23:06:46
202 Suhaili Hassan (kucingsyg96) Anastasia Borchuk (al2.borchuk) Indonesian Russian 9 14 10 14 0 0 0 0 0 2020-04-14 13:22:49
203 Seweryn Piotrowski (Draxxsx) iamsurajbobade Polish Hindi 9 14 10 30 0 0 19 0 0 0 2018-05-21 11:23:27
204 Rex123 Sanji Vinsmock (mukanzhanbolat4) Persian Russian 8 14 8 14 0 0 0 0 0 2020-02-18 12:38:54
205 Konstantin (KZhidovinov) Maro Chr (caprisunglasses) Russian Greek 7 14 7 17 0 0 0 0 0 2021-08-17 06:53:33
206 pkorove Nenad Vukotic (vukotic.nenad) Greek Serbian (Cyrillic) 7 13 7 13 0 0 1 0 2 0 6 0 2019-01-31 14:29:15
207 ftfoi Uwe Mönks (schirinowski) Norwegian German 7 13 6 12 0 0 0 0 0 2021-02-18 04:00:41
208 Андрій Козицький (andriikozytskyi3807) Dave (xdave) Ukrainian Hungarian 7 13 12 11 0 2 0 0 0 0 2020-03-02 20:56:50
209 Vladimir Pavlychev (KeyJoo) soura2 Russian Arabic 7 12 9 13 0 0 0 0 0 2020-01-13 19:23:47
210 Andrey ZaXeLoN (waragaa) shreyas (techiespace) Russian Hindi 7 12 7 20 0 8 0 1 0 0 0 2018-06-10 01:14:26
211 erfan2927 Sonu Sharma (riteetude) Persian Hindi 6 11 6 23 0 0 0 0 0 2021-05-30 19:38:00
212 dragnus Vmrc Arabic French 6 11 6 12 0 1 2 1 0 0 0 2020-11-02 05:35:06
213 Sam (SorodonSorodon) Jo Chuang (josephch405) German Chinese Traditional 6 11 6 24 0 13 0 0 0 0 11 2017-06-16 20:21:06
214 ChloeLiang sathvic k (sathvictripleseven) Japanese Telugu 6 10 22 17 0 0 1 0 0 3 0 2020-09-11 08:11:32
215 Burak Ceylan (7burakceylan) Brian Camacho (bmcamacho) Turkish Polish 6 10 6 11 0 0 0 1 0 0 2020-08-03 02:27:28
216 닉닉 (seohu9466) Anonymous edgy nerd (yamentaad) Korean Arabic 6 10 14 13 0 13 1 0 0 0 2018-05-06 09:23:57
217 Matthias Joly (joly.matt12) Edwin van Rooij (edwinvrooij) French Dutch 5 10 8 13 0 27 17 1 0 0 0 2018-11-05 03:59:10
218 Guerra Ivaneth (rossanaiva-04) Mihael Wagner (miha.wagner) Spanish Slovenian 5 10 7 9 0 0 7 0 0 0 2017-10-18 18:26:29
219 Manuel Tassi (Mannivu) Ahmed Mosaad (ahmed.mosaad2018) Italian Arabic 5 10 6 12 0 0 6 0 0 0 2021-02-03 18:45:43
220 Micaela Pighin (micaelapiighin) Suhaili Hassan (kucingsyg96) Spanish Indonesian 5 9 6 10 0 1 0 0 0 0 2018-06-10 11:55:09
221 Дмитрий Хапенков (d.khapenkov) Martin Vostatek (martinvostatek) Russian Czech 5 9 5 8 0 6 32 4 2 0 2 0 2019-01-21 13:52:36
222 andriikozytskyi2018 Seweryn Piotrowski (Draxxsx) Ukrainian Polish 5 9 5 10 0 0 0 19 0 0 2020-01-02 09:55:48
223 Neko123 (emandic11) Sourire Lucide (sourire_lucide) Serbian (Cyrillic) Russian 4 9 4 10 0 57 0 0 1 0 0 2018-03-22 01:37:55
224 marmo Rex123 German Persian 4 8 4 8 0 0 0 0 0 2017-07-01 00:47:42
225 Eli Besirov (elibesirov07) Andrey ZaXeLoN (waragaa) Turkish Russian 4 7 4 7 0 0 8 0 1 0 0 2017-09-18 21:37:42
226 Lopo Isaac Fernández (rocapata) Konstantin (KZhidovinov) Spanish Russian 4 7 3 7 0 0 0 0 0 2020-01-29 13:35:12
227 bziuum Андрій Козицький (andriikozytskyi3807) Polish Ukrainian 4 7 4 12 0 0 2 0 0 0 2020-09-26 20:31:56
228 Thoum Ptrgnt (thomas.petrignet) ftfoi French Norwegian 3 7 3 6 0 2 0 0 3 0 0 2020-04-11 20:42:35
229 Vagner Roberto (vagner.trompete) Vladimir Pavlychev (KeyJoo) Portuguese, Brazilian Russian 3 7 3 9 0 0 0 0 0 2017-12-18 02:46:56
230 Unnie Here (Carb) pkorove Hindi Greek 3 7 8 7 0 0 0 0 0 2020-03-07 11:36:12
231 carsten_kafke erfan2927 German Persian 3 6 3 6 0 43 0 0 0 3 0 2018-04-09 02:12:44
232 Magidxz Burak Ceylan (7burakceylan) Arabic Turkish 3 6 3 6 0 0 0 0 0 2018-05-20 17:24:19
233 atomjani Sam (SorodonSorodon) Hungarian German 3 6 3 6 0 0 13 0 0 0 2017-04-14 11:09:27
234 Péter Bernát (bernatp) 닉닉 (seohu9466) Hungarian Korean 3 6 2 14 0 0 13 0 0 0 2017-10-09 23:08:15
235 Igor Piskun (i_piskun) Sarita Cajas (sarayanacajas) Ukrainian Spanish 3 6 3 4 0 0 0 1 0 0 2021-05-14 14:27:59
236 joabe gabriel (joabegabrielcma1) ChloeLiang Portuguese, Brazilian Japanese 3 6 4 22 0 0 0 1 0 0 3 2017-08-08 05:02:59
237 Oleg Kogut (kogut_oleg) Manuel Tassi (Mannivu) Ukrainian Italian 3 5 3 6 0 0 0 0 0 2021-01-03 11:00:33
238 Andrea Bianchi (andreawhite1597) Tomáš Hrabáček (Hrabyyy) Italian Czech 3 5 1 3 0 1 0 0 0 0 2021-05-27 11:58:11
239 Gabriel Cavalcante (gabrielc.alves14) Guerra Ivaneth (rossanaiva-04) Portuguese, Brazilian Spanish 3 5 4 7 0 0 0 0 0 2019-02-03 16:48:59
240 REMOVED_USER Дмитрий Хапенков (d.khapenkov) Portuguese, Brazilian Russian 3 5 4 5 0 0 6 0 4 0 0 2 2018-01-06 23:00:43
241 Martin Zimdahl (zimdahlmartin) Matthias Joly (joly.matt12) Swedish French 3 5 2 8 0 0 27 1 0 3 0 2017-08-28 09:53:59
242 Hiohana Rilary (hiohanarilary) Micaela Pighin (micaelapiighin) Portuguese, Brazilian Spanish 3 5 4 6 0 0 1 0 0 0 2019-10-09 23:32:42
243 Sarath S (CyberShark) andriikozytskyi2018 Tamil Ukrainian 3 5 7 5 0 0 0 0 0 2017-09-03 05:24:43
244 Cláudio Bernardo (claudiobernardo.ti) marmo Portuguese, Brazilian German 3 4 4 0 1 0 0 0 0 2021-01-13 01:16:35
245 hesamiranii (esam.matouri) Eli Besirov (elibesirov07) Persian Turkish 2 4 2 4 0 0 0 0 0 2019-03-25 07:12:34
246 조화정 (yunjoo337) Lopo Isaac Fernández (rocapata) Korean Spanish 2 4 2 3 0 0 0 0 0 2018-09-20 11:46:22
247 Walid Baazia (walidbaazia2005) bziuum Arabic Polish 2 4 1 4 0 0 0 0 0 2020-09-01 09:08:01
248 LNDDYL Neko123 (emandic11) Chinese Traditional Serbian (Cyrillic) 2 4 4 0 0 57 0 0 2 0 2021-04-21 15:33:29
249 REMOVED_USER Magidxz Ukrainian Arabic 2 3 2 3 0 0 0 0 0 2021-01-05 05:02:54
250 fatemeh s (fargolseifoori3) mohammadali barati (mabaraty) Persian 2 3 2 3 0 0 0 0 0 2021-07-10 05:54:44
251 أم محمد تقي (souadboudia19) Sarath S (CyberShark) Arabic Tamil 2 3 2 7 0 0 0 0 0 2020-08-27 22:43:16
252 Alex Stein (diefaust1993) Unnie Here (Carb) Russian Hindi 2 3 2 8 0 4 0 4 0 0 2 0 2020-03-18 23:34:35
253 Danial Agh (danialagh) REMOVED_USER Persian Portuguese, Brazilian 2 3 3 4 0 0 0 0 0 2018-11-18 09:02:37
254 omerfarukbas Thoum Ptrgnt (thomas.petrignet) Turkish French 2 3 3 0 19 2 2 0 0 3 0 2017-09-23 19:25:52
255 Valerij D (vala.dobler) Oleg Kogut (kogut_oleg) German Ukrainian 2 3 2 3 0 0 0 0 0 2018-12-28 14:31:02
256 Naveen jai krishna (njsbpolymer1) carsten_kafke Tamil German 2 3 5 3 0 0 43 0 0 0 3 2017-10-27 13:27:47
257 Balthazar Aubard (Balatzar) Vagner Roberto (vagner.trompete) French Portuguese, Brazilian 2 3 5 3 0 0 1 0 0 0 2017-12-30 17:54:26
258 FAy FAy (fayfayfay52) Igor Piskun (i_piskun) Chinese Traditional Ukrainian 2 3 5 3 0 0 0 0 0 2018-01-19 15:20:27
259 Soroor_SI Andrea Bianchi (andreawhite1597) Persian Italian 2 3 2 1 0 0 1 0 0 0 2018-01-21 17:45:48
260 chavs1997 Cláudio Bernardo (claudiobernardo.ti) Russian Portuguese, Brazilian 2 3 2 4 0 9 1 0 0 0 2019-01-08 14:41:10
261 amei Hiohana Rilary (hiohanarilary) Portuguese, Brazilian 2 3 2 4 0 0 0 0 0 2019-07-31 20:42:20
262 Ilyas Fekhar (il47yas) joabe gabriel (joabegabrielcma1) Arabic Portuguese, Brazilian 2 3 2 4 0 0 0 0 0 2018-08-21 09:08:59
263 Ali Zaida (alizaeda92) Péter Bernát (bernatp) Arabic Hungarian 2 3 2 0 0 0 0 0 2019-11-30 15:50:33
264 gnu-ewm Martin Zimdahl (zimdahlmartin) Polish Swedish 1 3 1 2 0 6 0 0 1 0 0 3 2018-09-15 04:39:22
265 Luca Gori (grolcu) Gabriel Cavalcante (gabrielc.alves14) Italian Portuguese, Brazilian 1 3 2 4 0 0 0 0 0 2018-08-06 22:24:54
266 Alan Jeon (skyisle) atomjani Korean Hungarian 1 3 2 3 0 8 0 0 0 0 2019-01-19 00:49:25
267 iSoron2 أم محمد تقي (souadboudia19) Portuguese, Brazilian Arabic 1 2 1 2 0 0 0 0 0 2020-06-13 15:24:17
268 Anastasiia Bondarenko (nastasya.bondarenko.97) FAy FAy (fayfayfay52) Russian Chinese Traditional 1 2 1 5 0 0 0 0 0 2017-10-06 08:53:21
269 Patrick Pimenta (trickap1) chavs1997 Portuguese, Brazilian Russian 1 2 1 2 0 0 9 0 0 0 2018-05-18 16:58:19
270 axd Soroor_SI Spanish Persian 1 2 1 2 0 15 0 0 0 0 2018-06-10 06:28:27
271 jonesses Ilyas Fekhar (il47yas) German Arabic 1 2 1 2 0 1 0 0 0 1 0 2018-04-17 22:00:41
272 박찌 (perpact20) hesamiranii (esam.matouri) Korean Persian 1 2 1 2 0 0 0 0 0 2018-09-22 16:33:36
273 Kan Black (kanblack.va) fatemeh s (fargolseifoori3) Vietnamese Persian 1 2 2 0 0 0 1 0 0 2019-01-31 12:06:57
274 REMOVED_USER amei Russian Portuguese, Brazilian 1 2 2 0 6 0 1 0 0 1 0 2018-04-19 19:42:28
275 Wibi Cahyo (wbcahyoh) Naveen jai krishna (njsbpolymer1) Indonesian Tamil 1 2 3 5 0 0 0 0 0 2020-01-10 14:19:41
276 Anton (tT0NG) Danial Agh (danialagh) Chinese Traditional Persian 1 2 2 3 0 0 0 0 1 0 2019-03-30 13:24:16
277 Maria Fefelova (mashafefel) Walid Baazia (walidbaazia2005) Russian Arabic 1 2 1 0 0 0 0 0 2021-01-27 12:47:34
278 Itch Ali Zaida (alizaeda92) Arabic 0 2 0 2 0 0 0 0 0 2019-12-01 11:47:00
279 Muhammet Furkan ALMACI (furkan.almaci) LNDDYL Turkish Chinese Traditional 0 2 0 4 0 1 0 0 0 0 2 2018-04-22 04:00:19
280 Sandhu564. Ño Bí Tã (pt614553) Arabic 0 2 0 8 0 0 1 0 0 0 2021-05-22 20:41:01
281 Quentin Hibon (hiq) Judith Ayala (Azul1612) Spanish 0 2 0 1 0 0 0 0 1 0 2021-05-18 17:07:19
282 mushin REMOVED_USER Ukrainian 0 2 0 2 0 0 0 0 0 2017-06-15 12:24:44
283 Balaji Jayaraman (jkbalaji1103) Valerij D (vala.dobler) German 0 2 0 2 0 0 0 0 0 2018-09-22 09:38:27
284 Wellington Ribeiro (wellington.rib) Alex Stein (diefaust1993) Russian 0 2 0 2 0 0 4 0 4 0 0 2 2017-07-13 06:56:17
285 Javid IRAN (twitteriran98) 조화정 (yunjoo337) Persian Korean 0 2 0 2 0 1 0 0 0 0 2019-06-16 22:25:31
286 박인호 (wphestiraid) omerfarukbas Korean Turkish 0 2 0 3 0 2 19 0 2 0 0 2017-08-14 16:10:35
287 Ahmed Nazir (ahmednazir333) Balthazar Aubard (Balatzar) French 0 2 0 5 0 0 0 1 0 0 2017-09-23 01:42:57
288 dimateos Luca Gori (grolcu) Italian 0 1 0 2 0 0 0 0 0 2020-09-26 23:26:15
289 AhmedDz axd Arabic Spanish 0 1 0 1 0 1 15 0 0 0 2017-09-12 05:48:51
290 reza golestanzadeh (reza.golestanzadeh) iSoron2 Persian Portuguese, Brazilian 0 1 0 1 0 1 0 0 0 0 2017-03-18 17:56:29
291 Petros Bleyan (coolbleyan) REMOVED_USER Russian 0 1 0 2 0 14 6 0 1 0 0 1 2019-12-26 05:37:01
292 Kamalakannan Wibi Cahyo (wbcahyoh) Indonesian 0 1 0 3 0 0 0 0 0 2017-12-14 06:35:58
293 Dagna Q (dagnaq) jonesses German 0 1 0 1 0 0 1 0 0 0 1 2021-01-01 08:03:18
294 Thomas Orlita (Thomas995) Anton (tT0NG) Czech Chinese Traditional 0 1 0 2 0 1 0 0 0 0 1 2017-07-06 14:18:39
295 Fazy1380 박찌 (perpact20) Korean 0 1 0 1 0 0 0 0 0 2018-02-10 10:11:44
296 Rivo Zängov (Eraser) Alan Jeon (skyisle) Korean 0 1 0 2 0 0 8 0 0 0 2018-01-09 10:46:00
297 T-v-Gerwen Maria Fefelova (mashafefel) Dutch Russian 0 1 0 1 0 47 0 0 0 0 2019-05-18 02:03:56
298 عبد الناصر سعيد الثبيتي (asaeed) Anastasiia Bondarenko (nastasya.bondarenko.97) Russian 0 1 0 1 0 0 0 0 0 2019-06-07 17:43:08
299 Edmunds Edmundam (edmundam) Kan Black (kanblack.va) Vietnamese 0 1 0 2 0 0 0 0 1 0 2019-01-15 03:50:10
300 vi ve (VimalV) Patrick Pimenta (trickap1) Portuguese, Brazilian 0 1 0 1 0 0 0 0 0 2018-12-01 14:31:21
301 LeMeD (LeMeS) Dagna Q (dagnaq) French 0 0 0 2 0 0 0 0 2017-08-06 01:42:52
302 Éjbãss Übbeî (littlebittlebottle) Kamalakannan Norwegian 0 0 0 152 0 0 0 0 2017-05-14 11:40:23
303 EmanAmini Éjbãss Übbeî (littlebittlebottle) Norwegian 0 0 0 0 152 0 0 0 2017-07-05 21:12:02
304 AnggaRifandi Равиль Мифтахов (ravilmif47) Russian 0 0 0 0 1 0 0 0 2019-08-12 21:58:30
305 Mateusz Teteruk (mttet) sanyoniket Polish 0 0 0 1 0 0 0 0 2019-07-23 12:58:40
306 Lori Amico (lavodkaclyde2323) REMOVED_USER Italian 0 0 0 1 0 0 0 0 2020-02-01 03:47:48
307 Florian Stuhlmann (stuhlmann) vi ve (VimalV) German 0 0 0 10 0 0 0 0 2021-02-08 02:35:45
308 Yasin Okumus (lacivert) George Merkulov (george142.emarket) Turkish Russian 0 0 0 1 11 0 0 0 2019-06-09 19:47:02
309 NairaDNV Yasin Okumus (lacivert) Spanish Turkish 0 0 0 9 1 0 0 0 2018-02-07 04:13:51
310 REMOVED_USER Petros Bleyan (coolbleyan) Russian 0 0 0 0 14 0 0 0 2017-08-18 18:37:18
311 farbod66 LeMeD (LeMeS) Persian French 0 0 0 1 2 0 0 0 2021-02-06 15:35:00
312 Raulbertassi ava_rfie Persian 0 0 0 0 1 0 0 0 2019-06-09 16:19:24
313 Равиль Мифтахов (ravilmif47) Mateusz Teteruk (mttet) Russian Polish 0 0 0 1 0 0 0 2021-01-23 13:09:59
314 Pumpith Ungsupanit (pumpithu) EwanB 0 0 0 0 0 0 0 2019-11-19 10:04:38
315 Nat Fomicheva (natac) Fazy1380 Russian 0 0 0 3 0 0 0 0 2021-04-10 11:02:53
316 EwanB Lori Amico (lavodkaclyde2323) Italian 0 0 0 0 1 0 0 0 2017-04-09 10:08:13
317 ava_rfie Florian Stuhlmann (stuhlmann) Persian German 0 0 0 1 10 0 0 0 2017-04-15 04:04:00
318 George Merkulov (george142.emarket) عبد الناصر سعيد الثبيتي (asaeed) Russian 0 0 0 11 0 0 0 0 2018-03-13 02:09:35
319 REMOVED_USER Rivo Zängov (Eraser) 0 0 0 0 0 0 0 2020-10-13 04:38:26
320 sanyoniket Hayder21 0 0 0 0 0 0 0 2019-12-31 10:56:24
321 Shuvashish Sahoo (shuvashish76) T-v-Gerwen Dutch 0 0 0 0 47 0 0 0 2018-03-02 10:26:33
322 martyaberger Eduard Boboc (edi.boboc33) Romanian 0 0 0 0 4 0 0 0 2019-12-16 09:08:39
323 Карлен Шаухаев (KarlenShaukhaev) Samuel Przeździęk (samek22) Polish 0 0 0 0 1 0 0 0 2021-08-01 00:49:01
324 Elmo (oberknecht) Saiprasath B (Saiprasath) 0 0 0 0 0 0 0 2021-07-11 11:10:41
325 Irsgram shuvo786 Russian 0 0 0 1 0 0 0 0 2019-11-13 00:18:12
326 Matus Zdansky (matuszdansky) Edmunds Edmundam (edmundam) 0 0 0 0 0 0 0 2020-06-01 14:18:18
327 shuvo786 Itch 0 0 0 0 0 0 0 2017-10-16 09:18:42
328 Eduard Boboc (edi.boboc33) Manny Farsangy (manifarsangi) Romanian Persian 0 0 0 4 12 0 0 0 2021-08-10 05:32:28
329 Hayder21 Matus Zdansky (matuszdansky) 0 0 0 0 0 0 0 2019-10-20 13:52:24
330 AsadullahIlyas Thomas Orlita (Thomas995) Czech 0 0 0 0 1 0 0 0 2017-12-24 04:08:27
331 Никита Карамов (nikita.karamoff) Irsgram Russian 0 0 0 10 1 0 0 0 2019-09-30 16:42:20
332 Katherine Alexandra Flórez Ramírez (katherine.florez12) EmanAmini Spanish 0 0 0 46 0 0 0 0 2017-03-31 13:27:43
333 mdrobulis mushin 0 0 0 0 0 0 0 2020-02-02 04:08:05
334 Eliška Roubalová (roubaeli) Elmo (oberknecht) Czech 0 0 0 6 0 0 0 0 2020-04-16 08:45:50
335 droidahmed AnggaRifandi Arabic 0 0 0 7 0 0 0 0 2017-03-31 19:28:35
336 Arjun K. (arjunkdot) darkkingredian (rediancool) 0 0 0 0 0 0 0 2021-07-27 16:04:32
337 Sarah BCNN (fsarahboucenna) Sri Harsha Bhogi (sriharshabhogi) French 0 0 0 16 0 0 0 0 2018-09-02 05:31:53
338 REMOVED_USER Nat Fomicheva (natac) Czech Russian 0 0 0 18 3 0 0 0 2019-01-25 14:35:02
339 BongTran mdrobulis Vietnamese 0 0 0 2 0 0 0 0 2018-05-24 01:40:42
340 Arttu Ylhävuori (arttu.ylhavuori) Sarah BCNN (fsarahboucenna) French 0 0 0 0 16 0 0 0 2018-02-11 11:07:36
341 valney.faria Arjun K. (arjunkdot) Portuguese, Brazilian 0 0 0 1 0 0 0 0 2020-09-20 11:16:18
342 REMOVED_USER Czech 0 0 0 0 18 0 0 0 2018-03-27 06:19:52
343 rooban23 martyaberger 0 0 0 0 0 0 0 2019-01-01 18:48:08
344 REMOVED_USER BongTran Vietnamese 0 0 0 0 2 0 0 0 2018-04-24 05:16:07
345 Алтынбек Наурызғали (altinbeknaurizgali) Arttu Ylhävuori (arttu.ylhavuori) Russian 0 0 0 1 0 0 0 0 2019-07-24 15:03:42
346 Sri Harsha Bhogi (sriharshabhogi) Никита Карамов (nikita.karamoff) Russian 0 0 0 0 10 0 0 0 2018-10-29 03:57:21
347 Ahnaf Tajwar (atn4404) rooban23 0 0 0 0 0 0 0 2020-09-15 11:49:14
348 Elham1361 Eliška Roubalová (roubaeli) Czech 0 0 0 0 6 0 0 0 2019-12-31 12:47:29
349 dongchen.yue valney.faria German Portuguese, Brazilian 0 0 0 4 1 0 0 0 2020-02-02 14:45:02
350 philfr49 Алтынбек Наурызғали (altinbeknaurizgali) French Russian 0 0 0 2 1 0 0 0 2020-08-12 13:03:49
351 REMOVED_USER 0 0 0 0 0 0 0 2018-10-27 15:34:36
352 REMOVED_USER 0 0 0 0 0 0 0 2018-08-24 00:17:43
353 Elham1361 0 0 0 0 0 0 0 2018-10-27 12:01:06
354 dongchen.yue German 0 0 0 4 0 0 0 2020-09-12 15:05:59
355 Ahnaf Tajwar (atn4404) 0 0 0 0 0 0 0 2018-10-16 11:13:30
356 AsadullahIlyas 0 0 0 0 0 0 0 2019-01-04 06:14:15
357 droidahmed Arabic 0 0 0 7 0 0 0 2018-01-31 02:18:49
358 philfr49 French 0 0 0 2 0 0 0 2018-09-03 14:20:32
359 Ahmed Nazir (ahmednazir333) 0 0 0 0 0 0 0 2018-05-06 12:10:27
360 Balaji Jayaraman (jkbalaji1103) 0 0 0 0 0 0 0 2017-10-30 22:12:27
361 Wellington Ribeiro (wellington.rib) 0 0 0 0 0 0 0 2017-11-16 07:32:25
362 Javid IRAN (twitteriran98) Persian 0 0 0 1 0 0 0 2017-11-25 16:47:25
363 박인호 (wphestiraid) Korean 0 0 0 2 0 0 0 2018-01-05 00:33:14
364 Pumpith Ungsupanit (pumpithu) 0 0 0 0 0 0 0 2019-01-19 23:47:57
365 Sandhu564. 0 0 0 0 0 0 0 2020-12-14 01:27:45
366 Quentin Hibon (hiq) 0 0 0 0 0 0 0 2021-02-07 16:39:31
367 AhmedDz Arabic 0 0 0 1 0 0 0 2017-12-31 10:12:31
368 Shuvashish Sahoo (shuvashish76) 0 0 0 0 0 0 0 2020-09-17 09:10:09
369 REMOVED_USER 0 0 0 0 0 0 0 2018-01-05 16:56:12
370 NairaDNV Spanish 0 0 0 9 0 0 0 2018-01-05 19:10:33
371 Raulbertassi 0 0 0 0 0 0 0 2018-01-07 17:23:18
372 Карлен Шаухаев (KarlenShaukhaev) 0 0 0 0 0 0 0 2020-04-27 08:53:49
373 dimateos 0 0 0 0 0 0 0 2021-01-10 06:29:52
374 Katherine Alexandra Flórez Ramírez (katherine.florez12) Spanish 0 0 0 46 0 0 0 2018-01-20 02:18:32
375 reza golestanzadeh (reza.golestanzadeh) Persian 0 0 0 1 0 0 0 2020-10-21 12:07:20
376 farbod66 Persian 0 0 0 1 0 0 0 2018-01-20 11:04:23
377 Muhammet Furkan ALMACI (furkan.almaci) Turkish 0 0 0 1 0 0 0 2017-10-29 13:44:56

@ -20,7 +20,7 @@
*/ */
plugins { plugins {
id("com.github.triplet.play") version "3.2.0" id("com.github.triplet.play") version "3.5.0"
id("com.android.application") id("com.android.application")
id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.kapt") id("org.jetbrains.kotlin.kapt")
@ -37,8 +37,8 @@ android {
compileSdkVersion(30) compileSdkVersion(30)
defaultConfig { defaultConfig {
versionCode(20001) versionCode(20003)
versionName("2.0.1") versionName("2.0.3")
minSdkVersion(23) minSdkVersion(23)
targetSdkVersion(30) targetSdkVersion(30)
applicationId("org.isoron.uhabits") applicationId("org.isoron.uhabits")
@ -88,11 +88,11 @@ android {
} }
dependencies { dependencies {
val daggerVersion = "2.35.1" val daggerVersion = "2.38.1"
val kotlinVersion = "1.5.0" val kotlinVersion = "1.5.21"
val kxCoroutinesVersion = "1.4.2" val kxCoroutinesVersion = "1.5.1"
val ktorVersion = "1.5.4" val ktorVersion = "1.6.2"
val espressoVersion = "3.3.0" val espressoVersion = "3.4.0"
androidTestImplementation("androidx.test.espresso:espresso-contrib:$espressoVersion") androidTestImplementation("androidx.test.espresso:espresso-contrib:$espressoVersion")
androidTestImplementation("androidx.test.espresso:espresso-core:$espressoVersion") androidTestImplementation("androidx.test.espresso:espresso-core:$espressoVersion")
@ -101,9 +101,9 @@ dependencies {
androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion") androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion")
androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion") androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion")
androidTestImplementation("androidx.annotation:annotation:1.2.0") 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.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") androidTestImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
compileOnly("javax.annotation:jsr250-api:1.0") compileOnly("javax.annotation:jsr250-api:1.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") 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.kotlin:kotlin-stdlib-jdk8:$kotlinVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kxCoroutinesVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kxCoroutinesVersion")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$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-preference-v14:1.0.0")
implementation("androidx.legacy:legacy-support-v4: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.google.zxing:core:3.4.1")
implementation("com.opencsv:opencsv:5.4") implementation("com.opencsv:opencsv:5.5.1")
implementation(project(":uhabits-core")) implementation(project(":uhabits-core"))
kapt("com.google.dagger:dagger-compiler:$daggerVersion") kapt("com.google.dagger:dagger-compiler:$daggerVersion")
kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion") kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

@ -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
import org.isoron.uhabits.core.models.Frequency.Companion.DAILY import org.isoron.uhabits.core.models.Frequency.Companion.DAILY
import org.isoron.uhabits.core.models.Habit 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.HabitList
import org.isoron.uhabits.core.models.HabitType
import org.isoron.uhabits.core.models.ModelFactory 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.PaletteColor
import org.isoron.uhabits.core.models.Timestamp import org.isoron.uhabits.core.models.Timestamp
import org.isoron.uhabits.core.utils.DateUtils.Companion.getToday 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 { val habit = modelFactory.buildHabit().apply {
name = "Read" name = "Read"
question = "How many pages did you walk today?" question = "How many pages did you walk today?"
type = NUMBER_HABIT type = HabitType.NUMERICAL
targetType = AT_LEAST targetType = NumericalHabitType.AT_LEAST
targetValue = 200.0 targetValue = 200.0
unit = "pages" unit = "pages"
} }

@ -23,6 +23,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.core.models.Habit 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.screens.habits.show.views.ScoreCardPresenter.Companion.buildState
import org.isoron.uhabits.core.ui.views.LightTheme
import org.isoron.uhabits.utils.toFixedAndroidColor import org.isoron.uhabits.utils.toFixedAndroidColor
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -39,7 +40,12 @@ class ScoreChartTest : BaseViewTest() {
super.setUp() super.setUp()
fixtures.purgeHabits(habitList) fixtures.purgeHabits(habitList)
habit = fixtures.createLongHabit() 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 { view = ScoreChart(targetContext).apply {
setScores(state.scores) setScores(state.scores)
setColor(state.color.toFixedAndroidColor()) setColor(state.color.toFixedAndroidColor())
@ -72,7 +78,7 @@ class ScoreChartTest : BaseViewTest() {
@Test @Test
@Throws(Throwable::class) @Throws(Throwable::class)
fun testRender_withMonthlyBucket() { fun testRender_withMonthlyBucket() {
val (scores, bucketSize) = buildState(habit, prefs.firstWeekdayInt, 2) val (scores, bucketSize) = buildState(habit, prefs.firstWeekdayInt, 2, LightTheme())
view.setScores(scores) view.setScores(scores)
view.setBucketSize(bucketSize) view.setBucketSize(bucketSize)
view.invalidate() view.invalidate()
@ -89,7 +95,7 @@ class ScoreChartTest : BaseViewTest() {
@Test @Test
@Throws(Throwable::class) @Throws(Throwable::class)
fun testRender_withYearlyBucket() { fun testRender_withYearlyBucket() {
val state = buildState(habit, prefs.firstWeekdayInt, 4) val state = buildState(habit, prefs.firstWeekdayInt, 4, LightTheme())
view.setScores(state.scores) view.setScores(state.scores)
view.setBucketSize(state.bucketSize) view.setBucketSize(state.bucketSize)
view.invalidate() view.invalidate()

@ -25,6 +25,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.FrequencyCardPresenter 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.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -43,7 +44,13 @@ class FrequencyCardViewTest : BaseViewTest() {
.from(targetContext) .from(targetContext)
.inflate(R.layout.show_habit, null) .inflate(R.layout.show_habit, null)
.findViewById<View>(R.id.frequencyCard) as FrequencyCardView .findViewById<View>(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) measureView(view, 800f, 600f)
} }

@ -26,6 +26,7 @@ import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.ui.screens.habits.show.views.OverviewCardState 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.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -50,6 +51,7 @@ class OverviewCardViewTest : BaseViewTest() {
scoreYearDiff = 0.74f, scoreYearDiff = 0.74f,
totalCount = 44, totalCount = 44,
color = PaletteColor(7), color = PaletteColor(7),
theme = LightTheme(),
) )
) )
measureView(view, 800f, 300f) measureView(view, 800f, 300f)

@ -25,6 +25,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardPresenter.Companion.buildState 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.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -43,7 +44,14 @@ class ScoreCardViewTest : BaseViewTest() {
.from(targetContext) .from(targetContext)
.inflate(R.layout.show_habit, null) .inflate(R.layout.show_habit, null)
.findViewById<View>(R.id.scoreCard) as ScoreCardView .findViewById<View>(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) measureView(view, 800f, 600f)
} }

@ -25,6 +25,7 @@ import androidx.test.filters.MediumTest
import org.isoron.uhabits.BaseViewTest import org.isoron.uhabits.BaseViewTest
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.StreakCardState 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.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -47,6 +48,7 @@ class StreakCardViewTest : BaseViewTest() {
StreakCardState( StreakCardState(
bestStreaks = habit.streaks.getBest(10), bestStreaks = habit.streaks.getBest(10),
color = habit.color, color = habit.color,
theme = LightTheme(),
) )
) )
measureView(view, 800f, 600f) measureView(view, 800f, 600f)

@ -28,6 +28,7 @@ import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.models.Reminder import org.isoron.uhabits.core.models.Reminder
import org.isoron.uhabits.core.models.WeekdayList.Companion.EVERY_DAY 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.screens.habits.show.views.SubtitleCardState
import org.isoron.uhabits.core.ui.views.LightTheme
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
@ -54,6 +55,7 @@ class SubtitleCardViewTest : BaseViewTest() {
reminder = Reminder(8, 30, EVERY_DAY), reminder = Reminder(8, 30, EVERY_DAY),
unit = "", unit = "",
targetValue = 0.0, targetValue = 0.0,
theme = LightTheme(),
) )
) )
measureView(view, 800f, 200f) measureView(view, 800f, 200f)

@ -50,7 +50,7 @@ class CheckmarkWidgetViewTest : BaseViewTest() {
name = habit.name name = habit.name
} }
view.refresh() view.refresh()
measureView(view, dpToPixels(100), dpToPixels(200)) measureView(view, dpToPixels(100), dpToPixels(125))
} }
@Test @Test

@ -36,6 +36,7 @@ class AndroidCanvas : Canvas {
var innerDensity = 1.0 var innerDensity = 1.0
var innerWidth = 0 var innerWidth = 0
var innerHeight = 0 var innerHeight = 0
var mHeight = 15
var paint = Paint().apply { var paint = Paint().apply {
isAntiAlias = true isAntiAlias = true
@ -64,11 +65,10 @@ class AndroidCanvas : Canvas {
} }
override fun drawText(text: String, x: Double, y: Double) { override fun drawText(text: String, x: Double, y: Double) {
textPaint.getTextBounds(text, 0, text.length, textBounds)
innerCanvas.drawText( innerCanvas.drawText(
text, text,
x.toDp(), x.toDp(),
y.toDp() - textBounds.exactCenterY(), y.toDp() + 0.6f * mHeight,
textPaint, textPaint,
) )
} }
@ -126,10 +126,17 @@ class AndroidCanvas : Canvas {
Font.BOLD -> Typeface.DEFAULT_BOLD Font.BOLD -> Typeface.DEFAULT_BOLD
Font.FONT_AWESOME -> getFontAwesome(context) Font.FONT_AWESOME -> getFontAwesome(context)
} }
updateMHeight()
} }
override fun setFontSize(size: Double) { override fun setFontSize(size: Double) {
textPaint.textSize = size.toDp() textPaint.textSize = size.toDp()
updateMHeight()
}
private fun updateMHeight() {
textPaint.getTextBounds("m", 0, 1, textBounds)
mHeight = textBounds.height()
} }
override fun setStrokeWidth(size: Double) { override fun setStrokeWidth(size: Double) {

@ -30,6 +30,7 @@ import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.ui.ThemeSwitcher import org.isoron.uhabits.core.ui.ThemeSwitcher
import org.isoron.uhabits.core.ui.views.DarkTheme import org.isoron.uhabits.core.ui.views.DarkTheme
import org.isoron.uhabits.core.ui.views.LightTheme 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.core.ui.views.Theme
import org.isoron.uhabits.inject.ActivityContext import org.isoron.uhabits.inject.ActivityContext
import org.isoron.uhabits.inject.ActivityScope import org.isoron.uhabits.inject.ActivityScope
@ -66,7 +67,7 @@ constructor(
} }
override fun applyPureBlackTheme() { override fun applyPureBlackTheme() {
currentTheme = DarkTheme() currentTheme = PureBlackTheme()
context.setTheme(R.style.AppBaseThemeDark_PureBlack) context.setTheme(R.style.AppBaseThemeDark_PureBlack)
(context as Activity).window.navigationBarColor = (context as Activity).window.navigationBarColor =
ContextCompat.getColor(context, R.color.black) ContextCompat.getColor(context, R.color.black)

@ -26,6 +26,7 @@ import org.isoron.uhabits.BuildConfig
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.AboutBinding import org.isoron.uhabits.databinding.AboutBinding
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.setupToolbar import org.isoron.uhabits.utils.setupToolbar
@SuppressLint("ViewConstructor") @SuppressLint("ViewConstructor")
@ -41,7 +42,8 @@ class AboutView(
setupToolbar( setupToolbar(
toolbar = binding.toolbar, toolbar = binding.toolbar,
color = PaletteColor(11), 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) val version = resources.getString(R.string.version_n)
binding.tvContributors.setOnClickListener { screen.showCodeContributorsWebsite() } binding.tvContributors.setOnClickListener { screen.showCodeContributorsWebsite() }

@ -19,20 +19,21 @@
package org.isoron.uhabits.activities.common.dialogs package org.isoron.uhabits.activities.common.dialogs
import android.content.Context import android.content.Context
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor 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.ActivityContext
import org.isoron.uhabits.inject.ActivityScope import org.isoron.uhabits.inject.ActivityScope
import org.isoron.uhabits.utils.StyledResources import org.isoron.uhabits.utils.StyledResources
import org.isoron.uhabits.utils.toThemedAndroidColor
import javax.inject.Inject import javax.inject.Inject
@ActivityScope @ActivityScope
class ColorPickerDialogFactory @Inject constructor(@param:ActivityContext private val context: Context) { 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 dialog = ColorPickerDialog()
val res = StyledResources(context) val res = StyledResources(context)
val androidColor = color.toThemedAndroidColor(context) val androidColor = theme.color(color).toInt()
dialog.initialize( dialog.initialize(
R.string.color_picker_default_title, R.string.color_picker_default_title,
res.getPalette(), res.getPalette(),

@ -160,6 +160,11 @@ class FrequencyPickerDialog(
private fun populateViews() { private fun populateViews() {
uncheckAll() uncheckAll()
if (freqDenominator == 30 || freqDenominator == 31) {
contentView.xTimesPerMonthRadioButton.isChecked = true
contentView.xTimesPerMonthTextView.setText(freqNumerator.toString())
focus(contentView.xTimesPerMonthTextView)
} else {
if (freqNumerator == 1) { if (freqNumerator == 1) {
if (freqDenominator == 1) { if (freqDenominator == 1) {
contentView.everyDayRadioButton.isChecked = true contentView.everyDayRadioButton.isChecked = true
@ -173,16 +178,13 @@ class FrequencyPickerDialog(
contentView.xTimesPerWeekRadioButton.isChecked = true contentView.xTimesPerWeekRadioButton.isChecked = true
contentView.xTimesPerWeekTextView.setText(freqNumerator.toString()) contentView.xTimesPerWeekTextView.setText(freqNumerator.toString())
focus(contentView.xTimesPerWeekTextView) focus(contentView.xTimesPerWeekTextView)
} else if (freqDenominator == 30 || freqDenominator == 31) {
contentView.xTimesPerMonthRadioButton.isChecked = true
contentView.xTimesPerMonthTextView.setText(freqNumerator.toString())
focus(contentView.xTimesPerMonthTextView)
} else { } else {
Log.w("FrequencyPickerDialog", "Unknown frequency: $freqNumerator/$freqDenominator") Log.w("FrequencyPickerDialog", "Unknown frequency: $freqNumerator/$freqDenominator")
contentView.everyDayRadioButton.isChecked = true contentView.everyDayRadioButton.isChecked = true
} }
} }
} }
}
private fun focus(view: EditText) { private fun focus(view: EditText) {
view.requestFocus() view.requestFocus()

@ -41,7 +41,7 @@ class BundleSavedState : AbsSavedState {
} }
companion object { companion object {
val CREATOR: Parcelable.Creator<BundleSavedState> = @JvmField val CREATOR: Parcelable.Creator<BundleSavedState> =
object : ClassLoaderCreator<BundleSavedState> { object : ClassLoaderCreator<BundleSavedState> {
override fun createFromParcel( override fun createFromParcel(
source: Parcel, source: Parcel,

@ -41,6 +41,7 @@ import org.isoron.uhabits.utils.InterfaceUtils.getFontAwesome
import org.isoron.uhabits.utils.InterfaceUtils.spToPixels import org.isoron.uhabits.utils.InterfaceUtils.spToPixels
import org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor import org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor
import org.isoron.uhabits.utils.StyledResources import org.isoron.uhabits.utils.StyledResources
import kotlin.math.max
import kotlin.math.min import kotlin.math.min
import kotlin.math.roundToLong import kotlin.math.roundToLong
@ -48,7 +49,7 @@ class RingView : View {
private var color: Int private var color: Int
private var precision: Float private var precision: Float
private var percentage: Float private var percentage: Float
private var diameter = 0 private var diameter = 1
private var thickness: Float private var thickness: Float
private var rect: RectF? = null private var rect: RectF? = null
private var pRing: TextPaint? = null private var pRing: TextPaint? = null
@ -169,7 +170,7 @@ class RingView : View {
super.onMeasure(widthMeasureSpec, heightMeasureSpec) super.onMeasure(widthMeasureSpec, heightMeasureSpec)
val width = MeasureSpec.getSize(widthMeasureSpec) val width = MeasureSpec.getSize(widthMeasureSpec)
val height = MeasureSpec.getSize(heightMeasureSpec) val height = MeasureSpec.getSize(heightMeasureSpec)
diameter = min(height, width) diameter = max(1, min(height, width))
pRing!!.textSize = textSize pRing!!.textSize = textSize
em = pRing!!.measureText("M") em = pRing!!.measureText("M")
setMeasuredDimension(diameter, diameter) setMeasuredDimension(diameter, diameter)

@ -117,7 +117,11 @@ class TargetChart : View {
barRect[rect.left + stop + padding, rect.top + baseSize * 0.05f, rect.right - padding] = barRect[rect.left + stop + padding, rect.top + baseSize * 0.05f, rect.right - padding] =
rect.bottom - baseSize * 0.05f rect.bottom - baseSize * 0.05f
canvas.drawRoundRect(barRect, round, round, paint!!) 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) percentage = min(1.0f, percentage)
// Draw completed box // Draw completed box

@ -32,7 +32,7 @@ class TaskProgressBar(
context, context,
null, null,
android.R.attr.progressBarStyleHorizontal android.R.attr.progressBarStyleHorizontal
), ),
TaskRunner.Listener { TaskRunner.Listener {
init { init {

@ -21,6 +21,7 @@ package org.isoron.uhabits.activities.habits.edit
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.content.res.Resources
import android.graphics.Color import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.text.Html 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.questionInput
import kotlinx.android.synthetic.main.activity_edit_habit.targetInput import kotlinx.android.synthetic.main.activity_edit_habit.targetInput
import kotlinx.android.synthetic.main.activity_edit_habit.unitInput import kotlinx.android.synthetic.main.activity_edit_habit.unitInput
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher 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.commands.EditHabitCommand
import org.isoron.uhabits.core.models.Frequency import org.isoron.uhabits.core.models.Frequency
import org.isoron.uhabits.core.models.Habit 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.PaletteColor
import org.isoron.uhabits.core.models.Reminder import org.isoron.uhabits.core.models.Reminder
import org.isoron.uhabits.core.models.WeekdayList 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.ColorUtils
import org.isoron.uhabits.utils.formatTime import org.isoron.uhabits.utils.formatTime
import org.isoron.uhabits.utils.toFormattedString 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() { class EditHabitActivity : AppCompatActivity() {
@ -66,7 +79,7 @@ class EditHabitActivity : AppCompatActivity() {
private lateinit var commandRunner: CommandRunner private lateinit var commandRunner: CommandRunner
var habitId = -1L var habitId = -1L
var habitType = -1 lateinit var habitType: HabitType
var unit = "" var unit = ""
var color = PaletteColor(11) var color = PaletteColor(11)
var androidColor = 0 var androidColor = 0
@ -105,12 +118,12 @@ class EditHabitActivity : AppCompatActivity() {
binding.unitInput.setText(habit.unit) binding.unitInput.setText(habit.unit)
binding.targetInput.setText(habit.targetValue.toString()) binding.targetInput.setText(habit.targetValue.toString())
} else { } else {
habitType = intent.getIntExtra("habitType", Habit.YES_NO_HABIT) habitType = HabitType.fromInt(intent.getIntExtra("habitType", HabitType.YES_NO.value))
} }
if (state != null) { if (state != null) {
habitId = state.getLong("habitId") habitId = state.getLong("habitId")
habitType = state.getInt("habitType") habitType = HabitType.fromInt(state.getInt("habitType"))
color = PaletteColor(state.getInt("paletteColor")) color = PaletteColor(state.getInt("paletteColor"))
freqNum = state.getInt("freqNum") freqNum = state.getInt("freqNum")
freqDen = state.getInt("freqDen") freqDen = state.getInt("freqDen")
@ -121,14 +134,17 @@ class EditHabitActivity : AppCompatActivity() {
updateColors() updateColors()
if (habitType == Habit.YES_NO_HABIT) { when (habitType) {
HabitType.YES_NO -> {
binding.unitOuterBox.visibility = View.GONE binding.unitOuterBox.visibility = View.GONE
binding.targetOuterBox.visibility = View.GONE binding.targetOuterBox.visibility = View.GONE
} else { }
HabitType.NUMERICAL -> {
binding.nameInput.hint = getString(R.string.measurable_short_example) binding.nameInput.hint = getString(R.string.measurable_short_example)
binding.questionInput.hint = getString(R.string.measurable_question_example) binding.questionInput.hint = getString(R.string.measurable_question_example)
binding.frequencyOuterBox.visibility = View.GONE binding.frequencyOuterBox.visibility = View.GONE
} }
}
setSupportActionBar(binding.toolbar) setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
@ -137,7 +153,7 @@ class EditHabitActivity : AppCompatActivity() {
val colorPickerDialogFactory = ColorPickerDialogFactory(this) val colorPickerDialogFactory = ColorPickerDialogFactory(this)
binding.colorButton.setOnClickListener { binding.colorButton.setOnClickListener {
val dialog = colorPickerDialogFactory.create(color) val dialog = colorPickerDialogFactory.create(color, themeSwitcher.currentTheme)
dialog.setListener { paletteColor -> dialog.setListener { paletteColor ->
this.color = paletteColor this.color = paletteColor
updateColors() updateColors()
@ -244,9 +260,9 @@ class EditHabitActivity : AppCompatActivity() {
} }
habit.frequency = Frequency(freqNum, freqDen) habit.frequency = Frequency(freqNum, freqDen)
if (habitType == Habit.NUMBER_HABIT) { if (habitType == HabitType.NUMERICAL) {
habit.targetValue = targetInput.text.toString().toDouble() habit.targetValue = targetInput.text.toString().toDouble()
habit.targetType = Habit.AT_LEAST habit.targetType = NumericalHabitType.AT_LEAST
habit.unit = unitInput.text.trim().toString() habit.unit = unitInput.text.trim().toString()
} }
habit.type = habitType habit.type = habitType
@ -274,7 +290,7 @@ class EditHabitActivity : AppCompatActivity() {
nameInput.error = getFormattedValidationError(R.string.validation_cannot_be_blank) nameInput.error = getFormattedValidationError(R.string.validation_cannot_be_blank)
isValid = false isValid = false
} }
if (habitType == Habit.NUMBER_HABIT) { if (habitType == HabitType.NUMERICAL) {
if (targetInput.text.isEmpty()) { if (targetInput.text.isEmpty()) {
targetInput.error = getString(R.string.validation_cannot_be_blank) targetInput.error = getString(R.string.validation_cannot_be_blank)
isValid = false isValid = false
@ -299,14 +315,7 @@ class EditHabitActivity : AppCompatActivity() {
@SuppressLint("StringFormatMatches") @SuppressLint("StringFormatMatches")
private fun populateFrequency() { private fun populateFrequency() {
binding.booleanFrequencyPicker.text = when { binding.booleanFrequencyPicker.text = formatFrequency(freqNum, freqDen, resources)
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.numericalFrequencyPicker.text = when (freqDen) { binding.numericalFrequencyPicker.text = when (freqDen) {
1 -> getString(R.string.every_day) 1 -> getString(R.string.every_day)
7 -> getString(R.string.every_week) 7 -> getString(R.string.every_week)
@ -316,7 +325,7 @@ class EditHabitActivity : AppCompatActivity() {
} }
private fun updateColors() { private fun updateColors() {
androidColor = color.toThemedAndroidColor(this) androidColor = themeSwitcher.currentTheme.color(color).toInt()
binding.colorButton.backgroundTintList = ColorStateList.valueOf(androidColor) binding.colorButton.backgroundTintList = ColorStateList.valueOf(androidColor)
if (!themeSwitcher.isNightMode) { if (!themeSwitcher.isNightMode) {
val darkerAndroidColor = ColorUtils.mixColors(Color.BLACK, androidColor, 0.15f) val darkerAndroidColor = ColorUtils.mixColors(Color.BLACK, androidColor, 0.15f)
@ -334,7 +343,7 @@ class EditHabitActivity : AppCompatActivity() {
super.onSaveInstanceState(state) super.onSaveInstanceState(state)
with(state) { with(state) {
putLong("habitId", habitId) putLong("habitId", habitId)
putInt("habitType", habitType) putInt("habitType", habitType.value)
putInt("paletteColor", color.paletteIndex) putInt("paletteColor", color.paletteIndex)
putInt("androidColor", androidColor) putInt("androidColor", androidColor)
putInt("freqNum", freqNum) putInt("freqNum", freqNum)

@ -25,7 +25,7 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AppCompatDialogFragment import androidx.appcompat.app.AppCompatDialogFragment
import org.isoron.uhabits.R 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.databinding.SelectHabitTypeBinding
import org.isoron.uhabits.intents.IntentFactory import org.isoron.uhabits.intents.IntentFactory
@ -40,13 +40,13 @@ class HabitTypeDialog : AppCompatDialogFragment() {
val binding = SelectHabitTypeBinding.inflate(inflater, container, false) val binding = SelectHabitTypeBinding.inflate(inflater, container, false)
binding.buttonYesNo.setOnClickListener { binding.buttonYesNo.setOnClickListener {
val intent = IntentFactory().startEditActivity(activity!!, Habit.YES_NO_HABIT) val intent = IntentFactory().startEditActivity(activity!!, HabitType.YES_NO.value)
startActivity(intent) startActivity(intent)
dismiss() dismiss()
} }
binding.buttonMeasurable.setOnClickListener { binding.buttonMeasurable.setOnClickListener {
val intent = IntentFactory().startEditActivity(activity!!, Habit.NUMBER_HABIT) val intent = IntentFactory().startEditActivity(activity!!, HabitType.NUMERICAL.value)
startActivity(intent) startActivity(intent)
dismiss() dismiss()
} }

@ -40,7 +40,7 @@ import org.isoron.uhabits.inject.ActivityContextModule
import org.isoron.uhabits.inject.DaggerHabitsActivityComponent import org.isoron.uhabits.inject.DaggerHabitsActivityComponent
import org.isoron.uhabits.utils.restartWithFade import org.isoron.uhabits.utils.restartWithFade
class ListHabitsActivity : AppCompatActivity() { class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
var pureBlack: Boolean = false var pureBlack: Boolean = false
lateinit var taskRunner: TaskRunner lateinit var taskRunner: TaskRunner
@ -54,6 +54,10 @@ class ListHabitsActivity : AppCompatActivity() {
private lateinit var menu: ListHabitsMenu private lateinit var menu: ListHabitsMenu
override fun onQuestionMarksChanged() {
invalidateOptionsMenu()
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -66,6 +70,7 @@ class ListHabitsActivity : AppCompatActivity() {
component.themeSwitcher.apply() component.themeSwitcher.apply()
prefs = appComponent.preferences prefs = appComponent.preferences
prefs.addListener(this)
syncManager = appComponent.syncManager syncManager = appComponent.syncManager
pureBlack = prefs.isPureBlackEnabled pureBlack = prefs.isPureBlackEnabled
midnightTimer = appComponent.midnightTimer midnightTimer = appComponent.midnightTimer

@ -52,6 +52,11 @@ class ListHabitsMenu @Inject constructor(
nightModeItem.isChecked = themeSwitcher.isNightMode nightModeItem.isChecked = themeSwitcher.isNightMode
hideArchivedItem.isChecked = !preferences.showArchived hideArchivedItem.isChecked = !preferences.showArchived
hideCompletedItem.isChecked = !preferences.showCompleted 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) updateArrows(menu)
} }

@ -44,6 +44,7 @@ import org.isoron.uhabits.utils.addAtBottom
import org.isoron.uhabits.utils.addAtTop import org.isoron.uhabits.utils.addAtTop
import org.isoron.uhabits.utils.addBelow import org.isoron.uhabits.utils.addBelow
import org.isoron.uhabits.utils.buildToolbar import org.isoron.uhabits.utils.buildToolbar
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.dim import org.isoron.uhabits.utils.dim
import org.isoron.uhabits.utils.dp import org.isoron.uhabits.utils.dp
import org.isoron.uhabits.utils.setupToolbar import org.isoron.uhabits.utils.setupToolbar
@ -93,6 +94,7 @@ class ListHabitsRootView @Inject constructor(
title = resources.getString(R.string.main_activity_title), title = resources.getString(R.string.main_activity_title),
color = PaletteColor(17), color = PaletteColor(17),
displayHomeAsUpEnabled = false, displayHomeAsUpEnabled = false,
theme = currentTheme(),
) )
addView(rootView, MATCH_PARENT, MATCH_PARENT) addView(rootView, MATCH_PARENT, MATCH_PARENT)
listAdapter.setListView(listView) listAdapter.setListView(listView)

@ -231,7 +231,7 @@ class ListHabitsScreen
} }
override fun showColorPicker(defaultColor: PaletteColor, callback: OnColorPickedCallback) { override fun showColorPicker(defaultColor: PaletteColor, callback: OnColorPickedCallback) {
val picker = colorPickerFactory.create(defaultColor) val picker = colorPickerFactory.create(defaultColor, themeSwitcher.currentTheme!!)
picker.setListener(callback) picker.setListener(callback)
picker.show(activity.supportFragmentManager, "picker") picker.show(activity.supportFragmentManager, "picker")
} }

@ -131,7 +131,7 @@ class CheckmarkButtonView(
paint.color = when (value) { paint.color = when (value) {
YES_MANUAL, YES_AUTO, SKIP -> color YES_MANUAL, YES_AUTO, SKIP -> color
NO -> { NO -> {
if (preferences.areQuestionMarksEnabled()) mediumContrastColor if (preferences.areQuestionMarksEnabled) mediumContrastColor
else lowContrastColor else lowContrastColor
} }
else -> lowContrastColor else -> lowContrastColor
@ -140,7 +140,7 @@ class CheckmarkButtonView(
SKIP -> R.string.fa_skipped SKIP -> R.string.fa_skipped
NO -> R.string.fa_times NO -> R.string.fa_times
UNKNOWN -> { UNKNOWN -> {
if (preferences.areQuestionMarksEnabled()) R.string.fa_question if (preferences.areQuestionMarksEnabled) R.string.fa_question
else R.string.fa_times else R.string.fa_times
} }
else -> R.string.fa_check else -> R.string.fa_check
@ -153,7 +153,7 @@ class CheckmarkButtonView(
paint.style = Paint.Style.FILL paint.style = Paint.Style.FILL
} }
paint.textSize = when (value) { paint.textSize = when (id) {
UNKNOWN -> dim(R.dimen.smallerTextSize) UNKNOWN -> dim(R.dimen.smallerTextSize)
else -> dim(R.dimen.smallTextSize) else -> dim(R.dimen.smallTextSize)
} }

@ -33,6 +33,7 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.FrameLayout import android.widget.FrameLayout
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.activities.common.views.RingView import org.isoron.uhabits.activities.common.views.RingView
import org.isoron.uhabits.core.models.Habit 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.ui.screens.habits.list.ListHabitsBehavior
import org.isoron.uhabits.core.utils.DateUtils import org.isoron.uhabits.core.utils.DateUtils
import org.isoron.uhabits.inject.ActivityContext import org.isoron.uhabits.inject.ActivityContext
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.dp import org.isoron.uhabits.utils.dp
import org.isoron.uhabits.utils.sres import org.isoron.uhabits.utils.sres
import org.isoron.uhabits.utils.toThemedAndroidColor
import javax.inject.Inject import javax.inject.Inject
class HabitCardViewFactory class HabitCardViewFactory
@ -213,7 +214,7 @@ class HabitCardView(
fun getActiveColor(habit: Habit): Int { fun getActiveColor(habit: Habit): Int {
return when (habit.isArchived) { return when (habit.isArchived) {
true -> sres.getColor(R.attr.contrast60) true -> sres.getColor(R.attr.contrast60)
false -> habit.color.toThemedAndroidColor(context) false -> currentTheme().color(habit.color).toInt()
} }
} }

@ -169,7 +169,7 @@ class NumberButtonView(
typeface = BOLD_TYPEFACE typeface = BOLD_TYPEFACE
textSize = dim(R.dimen.smallTextSize) textSize = dim(R.dimen.smallTextSize)
} }
preferences.areQuestionMarksEnabled() -> { preferences.areQuestionMarksEnabled -> {
label = resources.getString(R.string.fa_question) label = resources.getString(R.string.fa_question)
typeface = getFontAwesome() typeface = getFontAwesome()
textSize = dim(R.dimen.smallerTextSize) textSize = dim(R.dimen.smallerTextSize)

@ -35,7 +35,12 @@ class ShowHabitView(context: Context) : FrameLayout(context) {
} }
fun setState(data: ShowHabitState) { 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.subtitleCard.setState(data.subtitle)
binding.overviewCard.setState(data.overview) binding.overviewCard.setState(data.overview)
binding.notesCard.setState(data.notes) binding.notesCard.setState(data.notes)

@ -24,12 +24,12 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.LinearLayout import android.widget.LinearLayout
import org.isoron.platform.gui.toInt
import org.isoron.platform.time.JavaLocalDateFormatter 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.BarCardPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.views.BarCardState import org.isoron.uhabits.core.ui.screens.habits.show.views.BarCardState
import org.isoron.uhabits.core.ui.views.BarChart import org.isoron.uhabits.core.ui.views.BarChart
import org.isoron.uhabits.databinding.ShowHabitBarBinding import org.isoron.uhabits.databinding.ShowHabitBarBinding
import org.isoron.uhabits.utils.toThemedAndroidColor
import java.util.Locale import java.util.Locale
class BarCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { 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) private var binding = ShowHabitBarBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: BarCardState) { 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 { binding.chart.view = BarChart(state.theme, JavaLocalDateFormatter(Locale.US)).apply {
series = mutableListOf(state.entries.map { it.value / 1000.0 }) series = mutableListOf(state.entries.map { it.value / 1000.0 })
colors = mutableListOf(theme.color(state.color.paletteIndex)) colors = mutableListOf(theme.color(state.color.paletteIndex))

@ -22,16 +22,16 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout 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.core.ui.screens.habits.show.views.FrequencyCardState
import org.isoron.uhabits.databinding.ShowHabitFrequencyBinding import org.isoron.uhabits.databinding.ShowHabitFrequencyBinding
import org.isoron.uhabits.utils.toThemedAndroidColor
class FrequencyCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { class FrequencyCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private var binding = ShowHabitFrequencyBinding.inflate(LayoutInflater.from(context), this) private var binding = ShowHabitFrequencyBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: FrequencyCardState) { 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.setFrequency(state.frequency)
binding.frequencyChart.setFirstWeekday(state.firstWeekday) binding.frequencyChart.setFirstWeekday(state.firstWeekday)
binding.title.setTextColor(androidColor) binding.title.setTextColor(androidColor)

@ -22,12 +22,12 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout import android.widget.LinearLayout
import org.isoron.platform.gui.toInt
import org.isoron.platform.time.JavaLocalDateFormatter 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.HistoryCardPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.views.HistoryCardState import org.isoron.uhabits.core.ui.screens.habits.show.views.HistoryCardState
import org.isoron.uhabits.core.ui.views.HistoryChart import org.isoron.uhabits.core.ui.views.HistoryChart
import org.isoron.uhabits.databinding.ShowHabitHistoryBinding import org.isoron.uhabits.databinding.ShowHabitHistoryBinding
import org.isoron.uhabits.utils.toThemedAndroidColor
import java.util.Locale import java.util.Locale
class HistoryCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { 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) private var binding = ShowHabitHistoryBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: HistoryCardState) { fun setState(state: HistoryCardState) {
val androidColor = state.color.toThemedAndroidColor(context) val androidColor = state.theme.color(state.color).toInt()
binding.title.setTextColor(androidColor) binding.title.setTextColor(androidColor)
binding.chart.view = HistoryChart( binding.chart.view = HistoryChart(
today = state.today, today = state.today,

@ -22,11 +22,11 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout import android.widget.LinearLayout
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.OverviewCardState import org.isoron.uhabits.core.ui.screens.habits.show.views.OverviewCardState
import org.isoron.uhabits.databinding.ShowHabitOverviewBinding import org.isoron.uhabits.databinding.ShowHabitOverviewBinding
import org.isoron.uhabits.utils.StyledResources import org.isoron.uhabits.utils.StyledResources
import org.isoron.uhabits.utils.toThemedAndroidColor
import kotlin.math.abs import kotlin.math.abs
class OverviewCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { 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) { fun setState(state: OverviewCardState) {
val androidColor = state.color.toThemedAndroidColor(context) val androidColor = state.theme.color(state.color).toInt()
val res = StyledResources(context) val res = StyledResources(context)
val inactiveColor = res.getColor(R.attr.contrast60) val inactiveColor = res.getColor(R.attr.contrast60)
binding.monthDiffLabel.setTextColor(if (state.scoreMonthDiff >= 0) androidColor else inactiveColor) binding.monthDiffLabel.setTextColor(if (state.scoreMonthDiff >= 0) androidColor else inactiveColor)

@ -24,16 +24,16 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.AdapterView import android.widget.AdapterView
import android.widget.LinearLayout 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.ScoreCardPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardState import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardState
import org.isoron.uhabits.databinding.ShowHabitScoreBinding import org.isoron.uhabits.databinding.ShowHabitScoreBinding
import org.isoron.uhabits.utils.toThemedAndroidColor
class ScoreCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { class ScoreCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private var binding = ShowHabitScoreBinding.inflate(LayoutInflater.from(context), this) private var binding = ShowHabitScoreBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: ScoreCardState) { fun setState(state: ScoreCardState) {
val androidColor = state.color.toThemedAndroidColor(context) val androidColor = state.theme.color(state.color).toInt()
binding.title.setTextColor(androidColor) binding.title.setTextColor(androidColor)
binding.spinner.setSelection(state.spinnerPosition) binding.spinner.setSelection(state.spinnerPosition)
binding.scoreView.setScores(state.scores) binding.scoreView.setScores(state.scores)

@ -22,16 +22,16 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout 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.core.ui.screens.habits.show.views.StreakCardState
import org.isoron.uhabits.databinding.ShowHabitStreakBinding import org.isoron.uhabits.databinding.ShowHabitStreakBinding
import org.isoron.uhabits.utils.toThemedAndroidColor
class StreakCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { class StreakCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private val binding = ShowHabitStreakBinding.inflate(LayoutInflater.from(context), this) private val binding = ShowHabitStreakBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: StreakCardState) { fun setState(state: StreakCardState) {
val color = state.color.toThemedAndroidColor(context) val androidColor = state.theme.color(state.color).toInt()
binding.title.setTextColor(color) binding.title.setTextColor(androidColor)
binding.streakChart.setColor(color) binding.streakChart.setColor(androidColor)
binding.streakChart.setStreaks(state.bestStreaks) binding.streakChart.setStreaks(state.bestStreaks)
postInvalidate() postInvalidate()
} }

@ -20,19 +20,18 @@ package org.isoron.uhabits.activities.habits.show.views
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.res.Resources
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R 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.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.core.ui.screens.habits.show.views.SubtitleCardState
import org.isoron.uhabits.databinding.ShowHabitSubtitleBinding import org.isoron.uhabits.databinding.ShowHabitSubtitleBinding
import org.isoron.uhabits.utils.InterfaceUtils import org.isoron.uhabits.utils.InterfaceUtils
import org.isoron.uhabits.utils.formatTime import org.isoron.uhabits.utils.formatTime
import org.isoron.uhabits.utils.toThemedAndroidColor
class SubtitleCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { class SubtitleCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
@ -47,9 +46,13 @@ class SubtitleCardView(context: Context, attrs: AttributeSet) : LinearLayout(con
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
fun setState(state: SubtitleCardState) { fun setState(state: SubtitleCardState) {
val color = state.color.toThemedAndroidColor(context) val color = state.theme.color(state.color).toInt()
val reminder = state.reminder 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.setTextColor(color)
binding.questionLabel.text = state.question binding.questionLabel.text = state.question
binding.reminderLabel.text = if (reminder != null) { binding.reminderLabel.text = if (reminder != null) {
@ -72,32 +75,4 @@ class SubtitleCardView(context: Context, attrs: AttributeSet) : LinearLayout(con
postInvalidate() 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"
}
} }

@ -23,15 +23,15 @@ import android.content.res.Resources
import android.util.AttributeSet import android.util.AttributeSet
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.LinearLayout import android.widget.LinearLayout
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.ui.screens.habits.show.views.TargetCardState import org.isoron.uhabits.core.ui.screens.habits.show.views.TargetCardState
import org.isoron.uhabits.databinding.ShowHabitTargetBinding import org.isoron.uhabits.databinding.ShowHabitTargetBinding
import org.isoron.uhabits.utils.toThemedAndroidColor
class TargetCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { class TargetCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
private val binding = ShowHabitTargetBinding.inflate(LayoutInflater.from(context), this) private val binding = ShowHabitTargetBinding.inflate(LayoutInflater.from(context), this)
fun setState(state: TargetCardState) { 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.setValues(state.values)
binding.targetChart.setTargets(state.targets) binding.targetChart.setTargets(state.targets)
binding.targetChart.setLabels(state.intervals.map { intervalToLabel(resources, it) }) binding.targetChart.setLabels(state.intervals.map { intervalToLabel(resources, it) })

@ -32,13 +32,15 @@ class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val component = (application as HabitsApplication).component 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)) val binding = SettingsActivityBinding.inflate(LayoutInflater.from(this))
binding.root.setupToolbar( binding.root.setupToolbar(
toolbar = binding.toolbar, toolbar = binding.toolbar,
title = resources.getString(R.string.settings), title = resources.getString(R.string.settings),
color = PaletteColor(11), color = PaletteColor(11),
theme = themeSwitcher.currentTheme,
) )
setContentView(binding.root) setContentView(binding.root)
} }

@ -57,7 +57,8 @@ class SyncActivity : AppCompatActivity(), SyncBehavior.Screen {
val component = (application as HabitsApplication).component val component = (application as HabitsApplication).component
val preferences = component.preferences val preferences = component.preferences
val server = RemoteSyncServer(preferences = 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) behavior = SyncBehavior(this, preferences, server, component.logging)
binding = ActivitySyncBinding.inflate(layoutInflater) binding = ActivitySyncBinding.inflate(layoutInflater)
@ -66,6 +67,7 @@ class SyncActivity : AppCompatActivity(), SyncBehavior.Screen {
toolbar = binding.toolbar, toolbar = binding.toolbar,
color = PaletteColor(11), color = PaletteColor(11),
title = resources.getString(R.string.device_sync), title = resources.getString(R.string.device_sync),
theme = themeSwitcher.currentTheme,
) )
binding.syncLink.setOnClickListener { copyToClipboard() } binding.syncLink.setOnClickListener { copyToClipboard() }
binding.instructions.text = Html.fromHtml(resources.getString(R.string.sync_instructions)) binding.instructions.text = Html.fromHtml(resources.getString(R.string.sync_instructions))

@ -33,6 +33,7 @@ import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.models.HabitList import org.isoron.uhabits.core.models.HabitList
import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.AutomationBinding import org.isoron.uhabits.databinding.AutomationBinding
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.setupToolbar import org.isoron.uhabits.utils.setupToolbar
import java.util.LinkedList import java.util.LinkedList
@ -53,6 +54,7 @@ class EditSettingRootView(
title = resources.getString(R.string.app_name), title = resources.getString(R.string.app_name),
color = PaletteColor(11), color = PaletteColor(11),
displayHomeAsUpEnabled = false, displayHomeAsUpEnabled = false,
theme = currentTheme(),
) )
populateHabitSpinner() populateHabitSpinner()
binding.habitSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { binding.habitSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

@ -63,13 +63,14 @@ class PendingIntentFactory
FLAG_UPDATE_CURRENT FLAG_UPDATE_CURRENT
) )
fun removeRepetition(habit: Habit): PendingIntent = fun removeRepetition(habit: Habit, timestamp: Timestamp?): PendingIntent =
getBroadcast( getBroadcast(
context, context,
3, 3,
Intent(context, WidgetReceiver::class.java).apply { Intent(context, WidgetReceiver::class.java).apply {
action = WidgetReceiver.ACTION_REMOVE_REPETITION action = WidgetReceiver.ACTION_REMOVE_REPETITION
data = Uri.parse(habit.uriString) data = Uri.parse(habit.uriString)
if (timestamp != null) putExtra("timestamp", timestamp.unixTime)
}, },
FLAG_UPDATE_CURRENT FLAG_UPDATE_CURRENT
) )

@ -107,7 +107,7 @@ class AndroidNotificationTray
val removeRepetitionAction = Action( val removeRepetitionAction = Action(
R.drawable.ic_action_cancel, R.drawable.ic_action_cancel,
context.getString(R.string.no), context.getString(R.string.no),
pendingIntents.removeRepetition(habit) pendingIntents.removeRepetition(habit, timestamp)
) )
val enterAction = Action( val enterAction = Action(

@ -28,6 +28,7 @@ import android.widget.AdapterView.OnItemClickListener
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import com.android.datetimepicker.time.RadialPickerLayout import com.android.datetimepicker.time.RadialPickerLayout
import com.android.datetimepicker.time.TimePickerDialog import com.android.datetimepicker.time.TimePickerDialog
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher 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.core.ui.ThemeSwitcher.Companion.THEME_LIGHT
import org.isoron.uhabits.receivers.ReminderController import org.isoron.uhabits.receivers.ReminderController
import org.isoron.uhabits.utils.SystemUtils import org.isoron.uhabits.utils.SystemUtils
import org.isoron.uhabits.utils.toThemedAndroidColor
import java.util.Calendar import java.util.Calendar
class SnoozeDelayPickerActivity : FragmentActivity(), OnItemClickListener { class SnoozeDelayPickerActivity : FragmentActivity(), OnItemClickListener {
private var habit: Habit? = null private var habit: Habit? = null
private var reminderController: ReminderController? = null private var reminderController: ReminderController? = null
private var dialog: AlertDialog? = null private var dialog: AlertDialog? = null
private var color: Int = 0 private var androidColor: Int = 0
override fun onCreate(bundle: Bundle?) { override fun onCreate(bundle: Bundle?) {
super.onCreate(bundle) super.onCreate(bundle)
@ -63,7 +63,7 @@ class SnoozeDelayPickerActivity : FragmentActivity(), OnItemClickListener {
habit = appComponent.habitList.getById(ContentUris.parseId(data)) habit = appComponent.habitList.getById(ContentUris.parseId(data))
} }
if (habit == null) finish() if (habit == null) finish()
color = habit!!.color.toThemedAndroidColor(this) androidColor = themeSwitcher.currentTheme.color(habit!!.color).toInt()
reminderController = appComponent.reminderController reminderController = appComponent.reminderController
dialog = AlertDialog.Builder(this) dialog = AlertDialog.Builder(this)
.setTitle(R.string.select_snooze_delay) .setTitle(R.string.select_snooze_delay)
@ -85,7 +85,7 @@ class SnoozeDelayPickerActivity : FragmentActivity(), OnItemClickListener {
calendar[Calendar.HOUR_OF_DAY], calendar[Calendar.HOUR_OF_DAY],
calendar[Calendar.MINUTE], calendar[Calendar.MINUTE],
DateFormat.is24HourFormat(this), DateFormat.is24HourFormat(this),
color androidColor
) )
dialog.show(supportFragmentManager, "timePicker") dialog.show(supportFragmentManager, "timePicker")
} }

@ -92,6 +92,9 @@ class SharedPreferencesStorage
preferences.setNotificationsSticky(getBoolean(key, false)) preferences.setNotificationsSticky(getBoolean(key, false))
"pref_led_notifications" -> "pref_led_notifications" ->
preferences.setNotificationsLed(getBoolean(key, false)) preferences.setNotificationsLed(getBoolean(key, false))
"pref_unknown_enabled" -> {
preferences.areQuestionMarksEnabled = getBoolean(key, false)
}
} }
sharedPreferences.registerOnSharedPreferenceChangeListener(this) sharedPreferences.registerOnSharedPreferenceChangeListener(this)
} }

@ -21,7 +21,6 @@ package org.isoron.uhabits.utils
import android.content.Context import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.util.Log
import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.models.PaletteColor
object PaletteUtils { object PaletteUtils {
@ -29,16 +28,6 @@ object PaletteUtils {
fun getAndroidTestColor(index: Int) = PaletteColor(index).toFixedAndroidColor() 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 { fun PaletteColor.toFixedAndroidColor(): Int {
return intArrayOf( return intArrayOf(
Color.parseColor("#D32F2F"), // 0 red Color.parseColor("#D32F2F"), // 0 red

@ -40,8 +40,12 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import com.google.android.material.snackbar.Snackbar 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.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.models.PaletteColor import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.core.ui.views.Theme
import java.io.File import java.io.File
fun RelativeLayout.addBelow( fun RelativeLayout.addBelow(
@ -157,6 +161,7 @@ fun View.setupToolbar(
toolbar: Toolbar, toolbar: Toolbar,
title: String, title: String,
color: PaletteColor, color: PaletteColor,
theme: Theme,
displayHomeAsUpEnabled: Boolean = true, displayHomeAsUpEnabled: Boolean = true,
) { ) {
toolbar.elevation = InterfaceUtils.dpToPixels(context, 2f) toolbar.elevation = InterfaceUtils.dpToPixels(context, 2f)
@ -165,7 +170,7 @@ fun View.setupToolbar(
val toolbarColor = if (!res.getBoolean(R.attr.useHabitColorAsPrimary)) { val toolbarColor = if (!res.getBoolean(R.attr.useHabitColorAsPrimary)) {
StyledResources(context).getColor(R.attr.colorPrimary) StyledResources(context).getColor(R.attr.colorPrimary)
} else { } else {
color.toThemedAndroidColor(context) theme.color(color).toInt()
} }
val darkerColor = ColorUtils.mixColors(toolbarColor, Color.BLACK, 0.75f) val darkerColor = ColorUtils.mixColors(toolbarColor, Color.BLACK, 0.75f)
toolbar.background = ColorDrawable(toolbarColor) toolbar.background = ColorDrawable(toolbarColor)
@ -175,6 +180,13 @@ fun View.setupToolbar(
activity.supportActionBar?.setDisplayHomeAsUpEnabled(displayHomeAsUpEnabled) 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) = fun Int.toMeasureSpec(mode: Int) =
View.MeasureSpec.makeMeasureSpec(this, mode) View.MeasureSpec.makeMeasureSpec(this, mode)

@ -32,6 +32,7 @@ import org.isoron.uhabits.core.commands.CommandRunner
import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.core.preferences.WidgetPreferences import org.isoron.uhabits.core.preferences.WidgetPreferences
import org.isoron.uhabits.intents.PendingIntentFactory import org.isoron.uhabits.intents.PendingIntentFactory
import kotlin.math.max
abstract class BaseWidget(val context: Context, val id: Int, val stacked: Boolean) { abstract class BaseWidget(val context: Context, val id: Int, val stacked: Boolean) {
private val widgetPrefs: WidgetPreferences 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 { private fun getBitmapFromView(view: View): Bitmap {
view.invalidate() view.invalidate()
val width = view.measuredWidth val width = max(1, view.measuredWidth)
val height = view.measuredHeight val height = max(1, view.measuredHeight)
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap) val canvas = Canvas(bitmap)
view.draw(canvas) view.draw(canvas)

@ -109,7 +109,7 @@ abstract class BaseWidgetProvider : AppWidgetProvider() {
} }
protected fun getHabitsFromWidgetId(widgetId: Int): List<Habit> { protected fun getHabitsFromWidgetId(widgetId: Int): List<Habit> {
val selectedIds = widgetPrefs.getHabitIdsFromWidgetId(widgetId)!! val selectedIds = widgetPrefs.getHabitIdsFromWidgetId(widgetId)
val selectedHabits = ArrayList<Habit>(selectedIds.size) val selectedHabits = ArrayList<Habit>(selectedIds.size)
for (id in selectedIds) { for (id in selectedIds) {
val h = habits.getById(id) ?: throw HabitNotFoundException() val h = habits.getById(id) ?: throw HabitNotFoundException()

@ -24,10 +24,11 @@ import android.content.Context
import android.os.Build import android.os.Build
import android.view.View import android.view.View
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.Entry
import org.isoron.uhabits.core.models.Habit 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.core.utils.DateUtils
import org.isoron.uhabits.utils.toThemedAndroidColor
import org.isoron.uhabits.widgets.views.CheckmarkWidgetView import org.isoron.uhabits.widgets.views.CheckmarkWidgetView
open class CheckmarkWidget( open class CheckmarkWidget(
@ -53,7 +54,7 @@ open class CheckmarkWidget(
(widgetView as CheckmarkWidgetView).apply { (widgetView as CheckmarkWidgetView).apply {
val today = DateUtils.getTodayWithOffset() val today = DateUtils.getTodayWithOffset()
setBackgroundAlpha(preferedBackgroundAlpha) setBackgroundAlpha(preferedBackgroundAlpha)
activeColor = habit.color.toThemedAndroidColor(context) activeColor = WidgetTheme().color(habit.color).toInt()
name = habit.name name = habit.name
entryValue = habit.computedEntries.get(today).value entryValue = habit.computedEntries.get(today).value
if (habit.isNumerical) { if (habit.isNumerical) {

@ -22,9 +22,10 @@ package org.isoron.uhabits.widgets
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.view.View import android.view.View
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.activities.common.views.FrequencyChart import org.isoron.uhabits.activities.common.views.FrequencyChart
import org.isoron.uhabits.core.models.Habit 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 import org.isoron.uhabits.widgets.views.GraphWidgetView
class FrequencyWidget( class FrequencyWidget(
@ -47,7 +48,7 @@ class FrequencyWidget(
if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f) if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f)
(widgetView.dataView as FrequencyChart).apply { (widgetView.dataView as FrequencyChart).apply {
setFirstWeekday(firstWeekday) setFirstWeekday(firstWeekday)
setColor(habit.color.toThemedAndroidColor(context)) setColor(WidgetTheme().color(habit.color).toInt())
setFrequency(habit.originalEntries.computeWeekdayFrequency(habit.isNumerical)) setFrequency(habit.originalEntries.computeWeekdayFrequency(habit.isNumerical))
} }
} }

@ -22,10 +22,11 @@ package org.isoron.uhabits.widgets
import android.app.PendingIntent import android.app.PendingIntent
import android.content.Context import android.content.Context
import android.view.View import android.view.View
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.activities.common.views.ScoreChart import org.isoron.uhabits.activities.common.views.ScoreChart
import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.ui.screens.habits.show.views.ScoreCardPresenter 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 import org.isoron.uhabits.widgets.views.GraphWidgetView
class ScoreWidget( class ScoreWidget(
@ -44,7 +45,8 @@ class ScoreWidget(
val viewModel = ScoreCardPresenter.buildState( val viewModel = ScoreCardPresenter.buildState(
habit = habit, habit = habit,
firstWeekday = prefs.firstWeekdayInt, firstWeekday = prefs.firstWeekdayInt,
spinnerPosition = prefs.scoreCardSpinnerPosition spinnerPosition = prefs.scoreCardSpinnerPosition,
theme = WidgetTheme(),
) )
val widgetView = view as GraphWidgetView val widgetView = view as GraphWidgetView
widgetView.setBackgroundAlpha(preferedBackgroundAlpha) widgetView.setBackgroundAlpha(preferedBackgroundAlpha)
@ -52,7 +54,7 @@ class ScoreWidget(
(widgetView.dataView as ScoreChart).apply { (widgetView.dataView as ScoreChart).apply {
setIsTransparencyEnabled(true) setIsTransparencyEnabled(true)
setBucketSize(viewModel.bucketSize) setBucketSize(viewModel.bucketSize)
setColor(habit.color.toThemedAndroidColor(context)) setColor(WidgetTheme().color(habit.color).toInt())
setScores(viewModel.scores) setScores(viewModel.scores)
} }
} }

@ -53,7 +53,7 @@ internal class StackRemoteViewsFactory(private val context: Context, intent: Int
AppWidgetManager.INVALID_APPWIDGET_ID AppWidgetManager.INVALID_APPWIDGET_ID
) )
private val habitIds: LongArray private val habitIds: LongArray
private val widgetType: StackWidgetType? private val widgetType: StackWidgetType
private var remoteViews = ArrayList<RemoteViews>() private var remoteViews = ArrayList<RemoteViews>()
override fun onCreate() {} override fun onCreate() {}
override fun onDestroy() {} override fun onDestroy() {}
@ -86,27 +86,27 @@ internal class StackRemoteViewsFactory(private val context: Context, intent: Int
override fun getViewAt(position: Int): RemoteViews? { override fun getViewAt(position: Int): RemoteViews? {
Log.i("StackRemoteViewsFactory", "getViewAt $position") 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( private fun constructWidget(
habit: Habit, habit: Habit,
prefs: Preferences prefs: Preferences
): BaseWidget { ): BaseWidget {
when (widgetType) { return when (widgetType) {
StackWidgetType.CHECKMARK -> return CheckmarkWidget(context, widgetId, habit, true) StackWidgetType.CHECKMARK -> CheckmarkWidget(context, widgetId, habit, true)
StackWidgetType.FREQUENCY -> return FrequencyWidget( StackWidgetType.FREQUENCY -> FrequencyWidget(
context, context,
widgetId, widgetId,
habit, habit,
prefs.firstWeekdayInt, prefs.firstWeekdayInt,
true true
) )
StackWidgetType.SCORE -> return ScoreWidget(context, widgetId, habit, true) StackWidgetType.SCORE -> ScoreWidget(context, widgetId, habit, true)
StackWidgetType.HISTORY -> return HistoryWidget(context, widgetId, habit, true) StackWidgetType.HISTORY -> HistoryWidget(context, widgetId, habit, true)
StackWidgetType.STREAKS -> return StreakWidget(context, widgetId, habit, true) StackWidgetType.STREAKS -> StreakWidget(context, widgetId, habit, true)
StackWidgetType.TARGET -> TargetWidget(context, widgetId, habit, true)
} }
throw IllegalStateException()
} }
override fun getLoadingView(): RemoteViews { 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 (widgetTypeValue < 0) throw RuntimeException("invalid widget type")
if (habitIdsStr == null) throw RuntimeException("habitIdsStr is null") if (habitIdsStr == null) throw RuntimeException("habitIdsStr is null")
widgetType = StackWidgetType.getWidgetTypeFromValue(widgetTypeValue) widgetType = StackWidgetType.getWidgetTypeFromValue(widgetTypeValue)
?: throw RuntimeException("unknown widget type value: $widgetTypeValue")
habitIds = splitLongs(habitIdsStr) habitIds = splitLongs(habitIdsStr)
} }
} }

@ -19,61 +19,59 @@
package org.isoron.uhabits.widgets package org.isoron.uhabits.widgets
import org.isoron.uhabits.R import org.isoron.uhabits.R
import java.lang.IllegalStateException
/**
* Created by victoryu on 11/3/17.
*/
enum class StackWidgetType(val value: Int) { enum class StackWidgetType(val value: Int) {
CHECKMARK(0), FREQUENCY(1), SCORE(2), // habit strength widget CHECKMARK(0), FREQUENCY(1), SCORE(2), // habit strength widget
HISTORY(3), STREAKS(4), TARGET(5); HISTORY(3), STREAKS(4), TARGET(5);
companion object { companion object {
fun getWidgetTypeFromValue(value: Int): StackWidgetType? { fun getWidgetTypeFromValue(value: Int): StackWidgetType? {
return when { return when (value) {
CHECKMARK.value == value -> CHECKMARK CHECKMARK.value -> CHECKMARK
FREQUENCY.value == value -> FREQUENCY FREQUENCY.value -> FREQUENCY
SCORE.value == value -> SCORE SCORE.value -> SCORE
HISTORY.value == value -> HISTORY HISTORY.value -> HISTORY
STREAKS.value == value -> STREAKS STREAKS.value -> STREAKS
TARGET.value == value -> TARGET TARGET.value -> TARGET
else -> null else -> null
} }
} }
fun getStackWidgetLayoutId(type: StackWidgetType?): Int { fun getStackWidgetLayoutId(type: StackWidgetType?): Int {
when (type) { return when (type) {
CHECKMARK -> return R.layout.checkmark_stackview_widget CHECKMARK -> R.layout.checkmark_stackview_widget
FREQUENCY -> return R.layout.frequency_stackview_widget FREQUENCY -> R.layout.frequency_stackview_widget
SCORE -> return R.layout.score_stackview_widget SCORE -> R.layout.score_stackview_widget
HISTORY -> return R.layout.history_stackview_widget HISTORY -> R.layout.history_stackview_widget
STREAKS -> return R.layout.streak_stackview_widget STREAKS -> R.layout.streak_stackview_widget
TARGET -> return R.layout.target_stackview_widget TARGET -> R.layout.target_stackview_widget
else -> throw IllegalStateException()
} }
return 0
} }
fun getStackWidgetAdapterViewId(type: StackWidgetType?): Int { fun getStackWidgetAdapterViewId(type: StackWidgetType?): Int {
when (type) { return when (type) {
CHECKMARK -> return R.id.checkmarkStackWidgetView CHECKMARK -> R.id.checkmarkStackWidgetView
FREQUENCY -> return R.id.frequencyStackWidgetView FREQUENCY -> R.id.frequencyStackWidgetView
SCORE -> return R.id.scoreStackWidgetView SCORE -> R.id.scoreStackWidgetView
HISTORY -> return R.id.historyStackWidgetView HISTORY -> R.id.historyStackWidgetView
STREAKS -> return R.id.streakStackWidgetView STREAKS -> R.id.streakStackWidgetView
TARGET -> return R.id.targetStackWidgetView TARGET -> R.id.targetStackWidgetView
else -> throw IllegalStateException()
} }
return 0
} }
fun getStackWidgetEmptyViewId(type: StackWidgetType?): Int { fun getStackWidgetEmptyViewId(type: StackWidgetType?): Int {
when (type) { return when (type) {
CHECKMARK -> return R.id.checkmarkStackWidgetEmptyView CHECKMARK -> R.id.checkmarkStackWidgetEmptyView
FREQUENCY -> return R.id.frequencyStackWidgetEmptyView FREQUENCY -> R.id.frequencyStackWidgetEmptyView
SCORE -> return R.id.scoreStackWidgetEmptyView SCORE -> R.id.scoreStackWidgetEmptyView
HISTORY -> return R.id.historyStackWidgetEmptyView HISTORY -> R.id.historyStackWidgetEmptyView
STREAKS -> return R.id.streakStackWidgetEmptyView STREAKS -> R.id.streakStackWidgetEmptyView
TARGET -> return R.id.targetStackWidgetEmptyView TARGET -> R.id.targetStackWidgetEmptyView
else -> throw IllegalStateException()
} }
return 0
} }
} }
} }

@ -24,9 +24,10 @@ import android.content.Context
import android.view.View import android.view.View
import android.view.ViewGroup.LayoutParams import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.MATCH_PARENT 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.activities.common.views.StreakChart
import org.isoron.uhabits.core.models.Habit 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 import org.isoron.uhabits.widgets.views.GraphWidgetView
class StreakWidget( class StreakWidget(
@ -46,7 +47,7 @@ class StreakWidget(
widgetView.setBackgroundAlpha(preferedBackgroundAlpha) widgetView.setBackgroundAlpha(preferedBackgroundAlpha)
if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f) if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f)
(widgetView.dataView as StreakChart).apply { (widgetView.dataView as StreakChart).apply {
setColor(habit.color.toThemedAndroidColor(context)) setColor(WidgetTheme().color(habit.color).toInt())
setStreaks(habit.streaks.getBest(maxStreakCount)) setStreaks(habit.streaks.getBest(maxStreakCount))
} }
} }

@ -25,11 +25,12 @@ import android.view.View
import android.view.ViewGroup.LayoutParams import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.activities.common.views.TargetChart import org.isoron.uhabits.activities.common.views.TargetChart
import org.isoron.uhabits.activities.habits.show.views.TargetCardView.Companion.intervalToLabel import org.isoron.uhabits.activities.habits.show.views.TargetCardView.Companion.intervalToLabel
import org.isoron.uhabits.core.models.Habit import org.isoron.uhabits.core.models.Habit
import org.isoron.uhabits.core.ui.screens.habits.show.views.TargetCardPresenter 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 import org.isoron.uhabits.widgets.views.GraphWidgetView
class TargetWidget( class TargetWidget(
@ -49,8 +50,12 @@ class TargetWidget(
widgetView.setBackgroundAlpha(preferedBackgroundAlpha) widgetView.setBackgroundAlpha(preferedBackgroundAlpha)
if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f) if (preferedBackgroundAlpha >= 255) widgetView.setShadowAlpha(0x4f)
val chart = (widgetView.dataView as TargetChart) val chart = (widgetView.dataView as TargetChart)
val data = TargetCardPresenter.buildState(habit, prefs.firstWeekdayInt) val data = TargetCardPresenter.buildState(
chart.setColor(data.color.toThemedAndroidColor(context)) habit = habit,
firstWeekday = prefs.firstWeekdayInt,
theme = WidgetTheme(),
)
chart.setColor(WidgetTheme().color(habit.color).toInt())
chart.setTargets(data.targets) chart.setTargets(data.targets)
chart.setLabels(data.intervals.map { intervalToLabel(context.resources, it) }) chart.setLabels(data.intervals.map { intervalToLabel(context.resources, it) })
chart.setValues(data.values) chart.setValues(data.values)

@ -95,7 +95,7 @@ class WidgetUpdater
val modifiedWidgetIds = when (modifiedHabitId) { val modifiedWidgetIds = when (modifiedHabitId) {
null -> widgetIds.toList() null -> widgetIds.toList()
else -> widgetIds.filter { w -> else -> widgetIds.filter { w ->
widgetPrefs.getHabitIdsFromWidgetId(w)!!.contains(modifiedHabitId) widgetPrefs.getHabitIdsFromWidgetId(w).contains(modifiedHabitId)
} }
} }

@ -31,6 +31,7 @@ import android.widget.ListView
import android.widget.TextView import android.widget.TextView
import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.preferences.WidgetPreferences import org.isoron.uhabits.core.preferences.WidgetPreferences
import org.isoron.uhabits.widgets.WidgetUpdater import org.isoron.uhabits.widgets.WidgetUpdater
import java.util.ArrayList import java.util.ArrayList
@ -58,6 +59,7 @@ open class HabitPickerDialog : Activity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
val component = (applicationContext as HabitsApplication).component val component = (applicationContext as HabitsApplication).component
AndroidThemeSwitcher(this, component.preferences).apply()
val habitList = component.habitList val habitList = component.habitList
widgetPreferences = component.widgetPreferences widgetPreferences = component.widgetPreferences
widgetUpdater = component.widgetUpdater widgetUpdater = component.widgetUpdater

@ -39,6 +39,7 @@ import org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor
import org.isoron.uhabits.utils.StyledResources import org.isoron.uhabits.utils.StyledResources
import kotlin.math.max import kotlin.math.max
import kotlin.math.min import kotlin.math.min
import kotlin.math.roundToInt
class CheckmarkWidgetView : HabitWidgetView { class CheckmarkWidgetView : HabitWidgetView {
var activeColor: Int = 0 var activeColor: Int = 0
@ -102,7 +103,7 @@ class CheckmarkWidgetView : HabitWidgetView {
SKIP -> resources.getString(R.string.fa_skipped) SKIP -> resources.getString(R.string.fa_skipped)
UNKNOWN -> { UNKNOWN -> {
run { run {
if (preferences!!.areQuestionMarksEnabled()) { if (preferences!!.areQuestionMarksEnabled) {
return resources.getString(R.string.fa_question) return resources.getString(R.string.fa_question)
} else { } else {
resources.getString(R.string.fa_times) resources.getString(R.string.fa_times)
@ -118,26 +119,25 @@ class CheckmarkWidgetView : HabitWidgetView {
get() = R.layout.widget_checkmark get() = R.layout.widget_checkmark
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
val width = MeasureSpec.getSize(widthMeasureSpec) var width = MeasureSpec.getSize(widthMeasureSpec)
val height = MeasureSpec.getSize(heightMeasureSpec) var height = MeasureSpec.getSize(heightMeasureSpec)
var w = width.toFloat() if (height >= width) {
var h = width * 1.25f height = min(height, (width * 1.5).roundToInt())
val scale = min(width / w, height / h) } else {
w *= scale width = min(width, height)
h *= scale }
val newWidthMeasureSpec = MeasureSpec.makeMeasureSpec(w.toInt(), MeasureSpec.EXACTLY) val textSize = min(0.2f * width, getDimension(context, R.dimen.smallerTextSize))
val newHeightMeasureSpec = MeasureSpec.makeMeasureSpec(h.toInt(), MeasureSpec.EXACTLY)
var textSize = 0.15f * h
val maxTextSize = getDimension(context, R.dimen.smallerTextSize)
textSize = min(textSize, maxTextSize)
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize) label.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
if (isNumerical) { if (isNumerical) {
ring.setTextSize(textSize * 0.75f) ring.setTextSize(textSize * 0.9f)
} else { } else {
ring.setTextSize(textSize) ring.setTextSize(textSize)
} }
ring.setThickness(0.15f * textSize) ring.setThickness(0.03f * width)
super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec) super.onMeasure(
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
)
} }
private fun init() { private fun init() {

@ -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.
<b>Interfície minimalista, lleugera i bonica</b> <b>Interfície minimalista, lleugera i bonica</b>
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. 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.

@ -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.
<b>Schöne, minimalistisch und übersichtliche Benutzeroberfläche</b> <b>Schöne, minimalistisch und übersichtliche Benutzeroberfläche</b>
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. 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.

@ -1 +1 @@
Erstelle gute Gewohnheiten und verfolge ihren Fortschritt (ohne Werbung) Erlange gute Gewohnheiten und verfolge dessen Fortschritte (ohne Werbung)

@ -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.
<b>Interfase hermosa, minimalista y liviana</b> <b>Interfaz hermosa, minimalista y liviana</b>
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. 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.
<b>Puntaje de hábitos</b> <b>Puntaje de hábitos</b>
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". 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. 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.
<b>Widgets</b> <b>Widgets</b>
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.
<b>Toma el control de tus datos</b> <b>Toma el control de tus datos</b>
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.
<b>Sin limitaciones</b> <b>Sin limitaciones</b>
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. 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.
<b>Completamente sin publicidades y código abierto</b> <b>Completamente sin anuncios y código abierto</b>
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). 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).
<b>Funciona sin conexión y respeta tu privacidad</b> <b>Funciona sin conexión y respeta tu privacidad</b>

@ -1,12 +1,12 @@
Loop Habit Tracker به شما کمک می‌کند تا عادت‌های مثبت طولانی‌مدت را در زندگی ایجاد و حفظ کنید. نمودارها و آمارهای دقیق، تصویری واضح از چگونگی بهبود عادت‌های شما در طول زمان به شما می‌دهد. این برنامه کاملاً بدون تبلیغات‌ و منبع‌باز است و به حریم خصوصی شما احترام می‌گذارد. عادت‌سنج لوپ به شما کمک می‌کند تا عادت‌های مثبت طولانی‌مدت را در زندگی ایجاد و حفظ کنید. نمودارها و آمارهای دقیق، تصویری واضح از چگونگی بهبود عادت‌های شما در طول زمان به شما می‌دهد. این برنامه کاملاً بدون تبلیغات‌ و منبع‌باز است و به حریم خصوصی شما احترام می‌گذارد.
<b>رابط کاربری زیبا‌، مینیمال و سبک</b> <b>رابط کاربری زیبا‌، مینیمال و سبک</b>
Loop دارای یک رابط زیبا و مینیمال است که استفاده از آن حتی برای کاربرانی که برای بار اول استفاده می‌کنند بسیار آسان است. این برنامه از نظر سرعت عملکرد بسیار بهینه شده و حتی در تلفن‌های قدیمی نیز به خوبی کار می‌کند. Loop دارای یک رابط زیبا و مینیمال است که استفاده از آن حتی برای کاربرانی که برای بار اول استفاده می‌کنند بسیار آسان است. این برنامه از نظر سرعت عملکرد بسیار بهینه شده و حتی در تلفن‌های قدیمی نیز به خوبی کار می‌کند.
<b>نمره عادت</b> <b>نمره عادت</b>
Loop فرمول پیشرفته‌ای برای محاسبه قدرت عادت‌های شما دارد. هر تکرار عادت شما را قوی‌تر می‌کند و هر روز فراموش‌شده آن را ضعیف می‌کند. چند روز از دست رفته پس از یک رشته طولانی ، برخلاف بسیاری از برنامه های شکننده نشده ، پیشرفت شما را به طور کامل از بین نمی برد. لوپ فرمول پیشرفته‌ای برای محاسبه قدرت عادت‌های شما دارد. هر تکرار عادت شما را قوی‌تر می‌کند و هر روز فراموش‌شده آن را ضعیف می‌کند. ولی برخلاف دیگر برنامه‌های عادت‌سنج، اگر بعد از یک روند طولانی حفظ عادت، چند روز آن عادت را انجام ندهید، پیشرفت شما به صورت کامل نابود نخواهد شد.
برنامه‌ریزی با دست باز <b>برنامه‌ریزی منعطف</b>
علاوه بر علاوه بر عادت‌هایی که هر روز باید تکرار شوند، شما می‌توانید برنامه‌ریزی‎‌های متنوعی دیگری را تنظیم کنید، مثلا هفته ای سه بار یا روز در میان علاوه بر علاوه بر عادت‌هایی که هر روز باید تکرار شوند، شما می‌توانید برنامه‌ریزی‎‌های متنوعی دیگری را تنظیم کنید، مثلا هفته ای سه بار یا روز در میان
یاداوری یاداوری
@ -19,11 +19,11 @@ Loop فرمول پیشرفته‌ای برای محاسبه قدرت عادت‌
اگر می خواهید داده های خود را بیشتر تجزیه و تحلیل کنید ، یا آنها را به سرویس دیگری منتقل کنید ، Loop به شما امکان می دهد آنها را به صفحه گسترده (CSV) یا یک پرونده پایگاه داده (SQLite) صادر کنید. برای کاربران قدرت ، علامت های تأیید را می توان از طریق برنامه های دیگر مانند Tasker اضافه کرد. اگر می خواهید داده های خود را بیشتر تجزیه و تحلیل کنید ، یا آنها را به سرویس دیگری منتقل کنید ، Loop به شما امکان می دهد آنها را به صفحه گسترده (CSV) یا یک پرونده پایگاه داده (SQLite) صادر کنید. برای کاربران قدرت ، علامت های تأیید را می توان از طریق برنامه های دیگر مانند Tasker اضافه کرد.
<b>بدون محدودیت</b> <b>بدون محدودیت</b>
هر تعداد که می خواهید عادت ها را دنبال کنید. حلقه محدودیتی مصنوعی در تعداد عادت های شما ایجاد نمی کند. همه ویژگی ها در دسترس همه کاربران است. هیچ خرید درون برنامه ای وجود ندارد. هر تعداد که می خواهید عادت ها را دنبال کنید. حلقه محدودیتی مصنوعی در تعداد عادت های شما ایجاد نمی کند. همه ویژگیها برای همه کاربران در دسترس هستند. هیچ خرید درون‌برنامه‌ای وجود ندارد.
<b>کاملاً بدون آگهی و منبع آزاد</b> <b>کاملاً بدون آگهی و منبع باز</b>
هیچ تبلیغی ، اعلان آزار دهنده یا مجوز سرزده در این برنامه وجود ندارد و هرگز وجود نخواهد داشت. برنامه کاملاً منبع باز (GPLv3) است. هیچ تبلیغ، اعلان آزاردهنده یا مجوز بی‌اجازه در این برنامه وجود ندارد و هرگز وجود نخواهد داشت. برنامه کاملاً منبع باز (GPLv3) است.
<b>بصورت آفلاین کار می کند و به حریم خصوصی شما احترام می گذارد</b> <b>به صورت آفلاین کار می‌کند و به حریم خصوصی شما احترام می گذارد</b>
حلقه به اتصال اینترنت یا ثبت نام آنلاین حساب نیاز ندارد. اطلاعات محرمانه شما هرگز برای کسی ارسال نمی شود. نه توسعه دهندگان و نه اشخاص ثالث به آن دسترسی ندارند. لوپ به اینترنت یا ثبت‌نام آنلاین نیاز ندارد. اطلاعات محرمانه شما هرگز به جایی ارسال نمی‌شود. نه توسعه‌دهندگان و نه اشخاص ثالث به آن دسترسی ندارند.

@ -1 +1 @@
ایجاد عادت های خوب و پیگیری پیشرفت آنها در طول زمان (بدون تبلیغ) عادت‌های خوب ایجاد کنید و پیشرفت آن‌ها را در طول زمان پیگیری کنید (بدون تبلیغ)

@ -1,29 +1,29 @@
אפליקצית Loop Habit Tracker עוזרת לך ליצור ולשמר הרגלים חיוביים וארוכי טווח בחייך. תרשימים וסטטיסטיקה מפורטים נותנים לך תמונה ברורה כיצד ההרגלים שלך השתפרו לאורך זמן. האפליקציה הינה נטולת פרסומות לחלוטין, כתובה בקוד פתוח וכן מכבדת את הפרטיות שלך. „Loop למעקב אחר ההרגלים” מסייע לך ביצירה ובשימור הרגלים טובים וארוכי טווח. תרשימים וסטטיסטיקה מפורטים נותנים לך תמונה ברורה כיצד ההרגלים שלך השתפרו לאורך זמן. היישום נטול פרסומות לחלוטין, קוד המקור שלו פתוח והוא מכבד את הפרטיות שלך.
<b>ממשק יפה, מינימלי וקליל</b> <b>ממשק יפה, חסכוני וקליל</b>
ל־Loop ממשק מינימלי וקל לשימוש, כבר בשימוש הראשון. האפליקציה מותאמת מאוד לפעולה מהירה, ופועלת היטב גם בטלפונים ישנים. ל־Loop ממשק אלגנטי, חסכוני וקל לשימוש אפילו בפעם הראשונה. היישום מותאם במיוחד למהירות, ועובד היטב גם בטלפונים ישנים.
<b>ציון הרגל</b> <b>ציון הרגל</b>
ל־Loop יש נוסחה מתקדמת לחישוב חוזק ההרגלים שלך. כל חזרה הופכת את ההרגל שלכם לחזק יותר, וכל יום שהוחמץ הופך אותו לחלש יותר. כמה ימים שהוחמצו לאחר רצף ארוך, לעומת זאת, לא יהרסו לחלוטין את ההתקדמות, בניגוד להרבה אפליקציות אחרות מסוג "אל תשברו את השרשרת". ל־Loop יש נוסחה מתקדמת לחישוב חוזק ההרגלים שלך. כל חזרה על ההרגל מחזקת אותו, וכל יום שהוחמץ מחליש אותו. כמה ימים שהוחמצו לאחר רצף ארוך, לעומת זאת, לא יהרסו לחלוטין את ההתקדמות, בניגוד ליישומים רבים אחרים מסוג „לא לשבור את השרשרת”.
<b>לוחות זמנים גמישים</b> <b>לוחות זמנים גמישים</b>
בנוסף להרגלים יומיומיים, Loop תומכת בהרגלים עם לוחות זמנים מורכבים יותר, כמו 3 פעמים בשבוע או "יום כן יום לא". בנוסף להרגלים יומיומיים, Loop תומך בהרגלים עם לוחות זמנים מורכבים יותר, כמו 3 פעמים בשבוע או „יום כן יום לא”.
<b>תזכורות</b> <b>תזכורות</b>
אפשר לתזמן התראות קבועות עם תזכורות לגבי ההרגלים שלך. לכל הרגל יכולה להיות תזכורת משלו, בשעה שנבחרה ביום. אפשר לסמן או לדחות את עשיית ההרגל ישירות מההתראה בקלות. אפשר לתזמן התראות קבועות עם תזכורות לגבי ההרגלים שלך. לכל הרגל יכולה להיות תזכורת משלו, בשעה שנבחרה ביום. אפשר לסמן או לדחות את עשיית ההרגל ישירות מההתראה בקלות.
<b>ווידג'טים</b> <b>יישומונים</b>
היזכרו בהרגלים בכל שחרור נעילת הטלפון. ווידג'טים צבעוניים מאפשרים לך לעקוב אחר הרגליך ישירות ממסך הבית שלך, מבלי לפתוח את האפליקציה אפילו. להיזכר בהרגלים בכל שחרור נעילת הטלפון. יישומונים צבעוניים שמאפשרים לך לעקוב אחר ההרגלים ישירות ממסך הבית, מבלי לפתוח אפילו את היישום.
<b>השליטה בנתונים היא בידיים שלך</b> <b>השליטה בנתונים היא בידיים שלך</b>
אם ברצונך לנתח עוד יותר את הנתונים שלך, או להעביר אותם לשירות אחר, Loop מאפשרת לך לייצא אותם לגיליונות אלקטרוניים (CSV) או לקובץ מסד נתונים (SQLite). עבור משתמשים מובילים, ישנה יכולת להוסיף ביקורת באמצעות אפליקציות אחרות, כגון Tasker. אם ברצונך לנתח יותר לעומק את הנתונים שלך, או להעבירם לשירות אחר, Loop מאפשרת לך לייצא אותם לגיליונות אלקטרוניים (CSV) או לקובץ מסד נתונים (SQLite). למשתמשים מתקדמים, אפשר לסמן הרגלים דרך יישומים אחרים, כגון Tasker.
<b>בלי הגבלות</b> <b>בלי הגבלות</b>
עקבו אחר כמה הרגלים שתרצו. Loop לא מגבילה את כמות ההרגלים שאפשר להוסיף. כל התכונות זמינות לכל המשתמשים. אין רכישות מתוך האפליקציה. אפשר לעקוב אחר כמה הרגלים שרוצים. Loop לא מגבילה את כמות ההרגלים שאפשר להוסיף. כל התכונות זמינות לכל המשתמשים. אין רכישות מתוך היישום.
<b>נטול פרסומות במלואו ובקוד פתוח</b> <b>היישום נטול פרסומות במלואו וקוד המקור שלו פתוח</b>
אין שום פרסומות, התראות מעצבנות או הרשאות פולשניות ביישום הזה, ולעולם לא יהיו. הקוד של היישום הזה פתוח במלואו (GPLv3). אין שום פרסומות, התראות מעצבנות או הרשאות פולשניות ביישום הזה, ולעולם לא יהיו. קוד היישום הזה פתוח לחלוטין (GPLv3).
<b>עובד במצב לא מקוון ומכבד את פרטיותך</b> <b>עובד במצב לא מקוון ומכבד את פרטיותך</b>
ל־Loop לא נחוצים חיבור לאינטרנט או הרשמה לחשבון מקוון. הנתונים הסודיים שלך לא נשלחים לאחרים בכלל. גם למפתחים וגם לגורמי צד שלישי כלשהם אין גישה אליהם. ל־Loop לא נחוצים חיבור לאינטרנט או הרשמה לחשבון מקוון. הנתונים הסודיים שלך לא נשלחים לאחרים כלל. גם למפתחים וגם לגורמי צד שלישי כלשהם אין גישה אליהם.

@ -1 +1 @@
התחלת הרגלים טובים ומעקב אחר ההתקדמות בעשייתם למשך זמן (ללא פרסומות) התחלת הרגלים טובים ומעקב אחר ההתקדמות בעשייתם לאורך זמן (ללא פרסומות)

@ -15,7 +15,7 @@ Plan notificaties om jezelf te herinneren aan je gewoontes. Elke gewoonte kan zi
<b>Widgets</b> <b>Widgets</b>
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. 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.
<b>Neem controle over uw gegevens</b> <b>Neem controle over je gegevens</b>
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. 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.
<b>Geen beperkingen</b> <b>Geen beperkingen</b>

@ -1,9 +1,9 @@
Трекер привычек Loop помогает вам создавать и поддерживать долгосрочные позитивные привычки в своей жизни. Подробные графики и статистика дадут вам чёткое представление о том, как ваши привычки улучшились с течением времени. Приложение полностью без рекламы, с открытым исходным кодом и с уважением к вашей конфиденциальности. Трекер привычек Loop помогает вам создавать и поддерживать долгосрочные позитивные привычки в своей жизни. Подробные графики и статистика дадут вам чёткое представление о том, как ваши привычки улучшились с течением времени. Приложение полностью без рекламы, с открытым исходным кодом и с уважением к вашей конфиденциальности.
<b>Красивый, минималистичный и лёгкий интерфейс</b> <b>Красивый, минималистичный и лёгкий интерфейс</b>
У Loop изящный и минималистичный интерфейс, который очень прост в использовании даже для начинающих пользователей. Высокооптимизированное для скорости, приложение хорошо работает даже на старых телефонах. У Loop изящный и минималистичный интерфейс, который очень прост в использовании даже для начинающих пользователей. Оптимизированное по скорости приложение хорошо работает даже на старых телефонах.
<b>Показатель привычек</b> <b>Показатель устойчивости привычки</b>
У Loop есть продвинутая формула для расчёта силы ваших привычек. Каждое повторение делает вашу привычку сильнее, а каждый пропущенный день - слабее. Однако несколько пропущенных дней после долгой полосы не погубят ваш прогресс в отличие от многих других приложений типа "не разрывай цепь". У Loop есть продвинутая формула для расчёта силы ваших привычек. Каждое повторение делает вашу привычку сильнее, а каждый пропущенный день - слабее. Однако несколько пропущенных дней после долгой полосы не погубят ваш прогресс в отличие от многих других приложений типа "не разрывай цепь".
<b>Гибкий график</b> <b>Гибкий график</b>

@ -1,4 +1,4 @@
Loop 习惯记录以下简称“Loop”可以帮助您建立好习惯且随着时间记录你的进步。 详细的图表和统计数据,可以使您更清楚地看到自己的进步。 该应用是完全无广告的开源软件,并且它尊重您的隐私。 Loop 习惯记录以下简称“Loop”能帮你养成和长期保持好习惯。 详细的图表和统计数据能让您更清楚地看到自己的进步。 这是一个完全无广告的开源应用,它尊重您的隐私。
<b>优雅、简约、轻巧</b> <b>优雅、简约、轻巧</b>
Loop 具有优雅而简约的界面,即使对于初次使用的用户,也非常易于使用。 该应用针对速度进行了高度优化,即使在较旧的手机上也可以正常运行。 Loop 具有优雅而简约的界面,即使对于初次使用的用户,也非常易于使用。 该应用针对速度进行了高度优化,即使在较旧的手机上也可以正常运行。
@ -12,7 +12,7 @@ Loop 有高级的公式来计算您习惯的强度。 多多重复会使你的
<b>提醒</b> <b>提醒</b>
设定通知以提醒您完成习惯。 每一种习惯都有属于自己的通知,您可以选定当天的某个时间提醒该习惯。 同时从通知中轻松地检查或取消您的习惯。 设定通知以提醒您完成习惯。 每一种习惯都有属于自己的通知,您可以选定当天的某个时间提醒该习惯。 同时从通知中轻松地检查或取消您的习惯。
<b>小部件</b> <b>件</b>
当您解锁手机时, 多彩的小部件可让您直接从主屏幕记录自己的习惯,而无需打开应用程序。 当您解锁手机时, 多彩的小部件可让您直接从主屏幕记录自己的习惯,而无需打开应用程序。
<b>掌控您的数据</b> <b>掌控您的数据</b>
@ -22,7 +22,7 @@ Loop 有高级的公式来计算您习惯的强度。 多多重复会使你的
想记录多少习惯都没问题! Loop 对您的习惯没有任何限制, 所有用户均可使用所有功能, 并且没有应用内购买。 想记录多少习惯都没问题! Loop 对您的习惯没有任何限制, 所有用户均可使用所有功能, 并且没有应用内购买。
<b>完全无广告的开源软件</b> <b>完全无广告的开源软件</b>
此应用程序中永远没有任何广告,烦人的通知或侵入性权限, 应用程序是完全开源的完整的代码在GPLv3 本应用永远都不会有广告和烦人的通知,也不会索取侵入性权限。 本应用是完全开源的GPLv3
<b>脱机工作并尊重您的隐私</b> <b>脱机工作并尊重您的隐私</b>
Loop 不需要网络连接或在线帐户注册。 您的用户数据永远不会发送给任何人, 包括开发人员和任何第三方都无法访问它。 Loop 不需要网络连接或在线帐户注册。 您的用户数据永远不会发送给任何人, 包括开发人员和任何第三方都无法访问它。

@ -1 +1 @@
建立好习惯且随着时间记录你的进步(无广告) 养成好习惯并随时记录你的进步(无广告)

@ -1,3 +1,5 @@
2.0.3:
* Bug fixes
2.0: 2.0:
* Track numeric habits (e.g. how many pages did you read?) * Track numeric habits (e.g. how many pages did you read?)
* Skip days without breaking your streak * Skip days without breaking your streak

@ -30,9 +30,11 @@
<TextView style="@style/About.Item" android:text="tat bz" /> <TextView style="@style/About.Item" android:text="tat bz" />
<TextView style="@style/About.Item.Language" android:text="Español" /> <TextView style="@style/About.Item.Language" android:text="Español" />
<TextView style="@style/About.Item" android:text="Ander Raso Vazquez" /> <TextView style="@style/About.Item" android:text="Ander Raso Vazquez" />
<TextView style="@style/About.Item" android:text="Eilif Adelvice" />
<TextView style="@style/About.Item" android:text="Iabin Arteaga" /> <TextView style="@style/About.Item" android:text="Iabin Arteaga" />
<TextView style="@style/About.Item" android:text="Sebastian05067" /> <TextView style="@style/About.Item" android:text="Sebastian05067" />
<TextView style="@style/About.Item" android:text="luiandresgonzalez" /> <TextView style="@style/About.Item" android:text="luiandresgonzalez" />
<TextView style="@style/About.Item" android:text="oscfd" />
<TextView style="@style/About.Item.Language" android:text="Esperanto" /> <TextView style="@style/About.Item.Language" android:text="Esperanto" />
<TextView style="@style/About.Item" android:text="4001982248998" /> <TextView style="@style/About.Item" android:text="4001982248998" />
<TextView style="@style/About.Item" android:text="marco.baturan" /> <TextView style="@style/About.Item" android:text="marco.baturan" />
@ -48,11 +50,14 @@
<TextView style="@style/About.Item" android:text="Samuel Guay" /> <TextView style="@style/About.Item" android:text="Samuel Guay" />
<TextView style="@style/About.Item" android:text="Thibaut Girka" /> <TextView style="@style/About.Item" android:text="Thibaut Girka" />
<TextView style="@style/About.Item" android:text="Tiralka" /> <TextView style="@style/About.Item" android:text="Tiralka" />
<TextView style="@style/About.Item" android:text="_translator" />
<TextView style="@style/About.Item" android:text="roptat" /> <TextView style="@style/About.Item" android:text="roptat" />
<TextView style="@style/About.Item.Language" android:text="Fārsi" /> <TextView style="@style/About.Item.Language" android:text="Fārsi" />
<TextView style="@style/About.Item" android:text="Behnood HRazy" /> <TextView style="@style/About.Item" android:text="Behnood HRazy" />
<TextView style="@style/About.Item" android:text="Eman" /> <TextView style="@style/About.Item" android:text="Eman" />
<TextView style="@style/About.Item" android:text="Saeed Esmaili" /> <TextView style="@style/About.Item" android:text="Saeed Esmaili" />
<TextView style="@style/About.Item.Language" android:text="Hindi" />
<TextView style="@style/About.Item" android:text="Vijaykumar Borkar" />
<TextView style="@style/About.Item.Language" android:text="Hrvatski" /> <TextView style="@style/About.Item.Language" android:text="Hrvatski" />
<TextView style="@style/About.Item" android:text="Ivan Krušlin" /> <TextView style="@style/About.Item" android:text="Ivan Krušlin" />
<TextView style="@style/About.Item.Language" android:text="Italiano" /> <TextView style="@style/About.Item.Language" android:text="Italiano" />
@ -63,6 +68,7 @@
<TextView style="@style/About.Item" android:text="Isti" /> <TextView style="@style/About.Item" android:text="Isti" />
<TextView style="@style/About.Item" android:text="gapszi" /> <TextView style="@style/About.Item" android:text="gapszi" />
<TextView style="@style/About.Item.Language" android:text="Nederlands" /> <TextView style="@style/About.Item.Language" android:text="Nederlands" />
<TextView style="@style/About.Item" android:text="Blinkin" />
<TextView style="@style/About.Item" android:text="Bryanx" /> <TextView style="@style/About.Item" android:text="Bryanx" />
<TextView style="@style/About.Item" android:text="Jelle den Butter" /> <TextView style="@style/About.Item" android:text="Jelle den Butter" />
<TextView style="@style/About.Item" android:text="Mark Macaré" /> <TextView style="@style/About.Item" android:text="Mark Macaré" />
@ -91,6 +97,7 @@
<TextView style="@style/About.Item" android:text="Dušan Strgar" /> <TextView style="@style/About.Item" android:text="Dušan Strgar" />
<TextView style="@style/About.Item.Language" android:text="Suomen kieli" /> <TextView style="@style/About.Item.Language" android:text="Suomen kieli" />
<TextView style="@style/About.Item" android:text="2kaafone" /> <TextView style="@style/About.Item" android:text="2kaafone" />
<TextView style="@style/About.Item" android:text="Antti Kallio" />
<TextView style="@style/About.Item" android:text="Elina Salminen" /> <TextView style="@style/About.Item" android:text="Elina Salminen" />
<TextView style="@style/About.Item" android:text="Sofia Veijonen" /> <TextView style="@style/About.Item" android:text="Sofia Veijonen" />
<TextView style="@style/About.Item.Language" android:text="Svenska" /> <TextView style="@style/About.Item.Language" android:text="Svenska" />
@ -104,6 +111,7 @@
<TextView style="@style/About.Item" android:text="Huy Ngo" /> <TextView style="@style/About.Item" android:text="Huy Ngo" />
<TextView style="@style/About.Item" android:text="Lương Vĩnh Khang" /> <TextView style="@style/About.Item" android:text="Lương Vĩnh Khang" />
<TextView style="@style/About.Item" android:text="Trần Thái" /> <TextView style="@style/About.Item" android:text="Trần Thái" />
<TextView style="@style/About.Item" android:text="bruhwut" />
<TextView style="@style/About.Item" android:text="pnhpnh" /> <TextView style="@style/About.Item" android:text="pnhpnh" />
<TextView style="@style/About.Item.Language" android:text="Türkçe" /> <TextView style="@style/About.Item.Language" android:text="Türkçe" />
<TextView style="@style/About.Item" android:text="Caner Başaran" /> <TextView style="@style/About.Item" android:text="Caner Başaran" />
@ -124,6 +132,7 @@
<TextView style="@style/About.Item" android:text="Diana Karaseva" /> <TextView style="@style/About.Item" android:text="Diana Karaseva" />
<TextView style="@style/About.Item" android:text="Dmitriy Bogdanov" /> <TextView style="@style/About.Item" android:text="Dmitriy Bogdanov" />
<TextView style="@style/About.Item" android:text="Tanya" /> <TextView style="@style/About.Item" android:text="Tanya" />
<TextView style="@style/About.Item" android:text="engineeringforgood" />
<TextView style="@style/About.Item.Language" android:text="Українська" /> <TextView style="@style/About.Item.Language" android:text="Українська" />
<TextView style="@style/About.Item" android:text="Oglaigh Rystard" /> <TextView style="@style/About.Item" android:text="Oglaigh Rystard" />
<TextView style="@style/About.Item" android:text="Prosta4ok_ua" /> <TextView style="@style/About.Item" android:text="Prosta4ok_ua" />
@ -136,6 +145,7 @@
<TextView style="@style/About.Item" android:text="Slobodan Simić" /> <TextView style="@style/About.Item" android:text="Slobodan Simić" />
<TextView style="@style/About.Item" android:text="Đorđe Vasiljević" /> <TextView style="@style/About.Item" android:text="Đorđe Vasiljević" />
<TextView style="@style/About.Item.Language" android:text="עברית‎" /> <TextView style="@style/About.Item.Language" android:text="עברית‎" />
<TextView style="@style/About.Item" android:text="Ohad Edri" />
<TextView style="@style/About.Item" android:text="Omer I.S." /> <TextView style="@style/About.Item" android:text="Omer I.S." />
<TextView style="@style/About.Item" android:text="Omry Cohen" /> <TextView style="@style/About.Item" android:text="Omry Cohen" />
<TextView style="@style/About.Item" android:text="Yoav Argov" /> <TextView style="@style/About.Item" android:text="Yoav Argov" />
@ -147,6 +157,7 @@
<TextView style="@style/About.Item" android:text="Michael Malak" /> <TextView style="@style/About.Item" android:text="Michael Malak" />
<TextView style="@style/About.Item" android:text="Saeed Esmaili" /> <TextView style="@style/About.Item" android:text="Saeed Esmaili" />
<TextView style="@style/About.Item" android:text="Sief Tarek" /> <TextView style="@style/About.Item" android:text="Sief Tarek" />
<TextView style="@style/About.Item" android:text="alalloush" />
<TextView style="@style/About.Item" android:text="mohmans" /> <TextView style="@style/About.Item" android:text="mohmans" />
<TextView style="@style/About.Item" android:text="reyhoon" /> <TextView style="@style/About.Item" android:text="reyhoon" />
<TextView style="@style/About.Item.Language" android:text="فارسی‎" /> <TextView style="@style/About.Item.Language" android:text="فارسی‎" />
@ -171,6 +182,7 @@
<TextView style="@style/About.Item" android:text="QWERT" /> <TextView style="@style/About.Item" android:text="QWERT" />
<TextView style="@style/About.Item" android:text="Ting-Hua" /> <TextView style="@style/About.Item" android:text="Ting-Hua" />
<TextView style="@style/About.Item" android:text="XuToTo" /> <TextView style="@style/About.Item" android:text="XuToTo" />
<TextView style="@style/About.Item" android:text="yoding" />
<TextView style="@style/About.Item" android:text="黄克" /> <TextView style="@style/About.Item" android:text="黄克" />
<TextView style="@style/About.Item.Language" android:text="日本語" /> <TextView style="@style/About.Item.Language" android:text="日本語" />
<TextView style="@style/About.Item" android:text="Naofumi F" /> <TextView style="@style/About.Item" android:text="Naofumi F" />

@ -185,7 +185,7 @@
style="@style/FormInput" style="@style/FormInput"
android:id="@+id/targetInput" android:id="@+id/targetInput"
android:maxLines="1" android:maxLines="1"
android:inputType="number" android:inputType="numberDecimal"
android:hint="@string/example_target"/> android:hint="@string/example_target"/>
</LinearLayout> </LinearLayout>
</FrameLayout> </FrameLayout>

@ -31,19 +31,19 @@
android:id="@+id/scoreRing" android:id="@+id/scoreRing"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="0.9"
habit:thickness="2" habit:thickness="2"
habit:textSize="16" habit:textSize="16"
habit:enableFontAwesome="true" habit:enableFontAwesome="true"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginLeft="12dp" android:layout_marginLeft="4dp"
android:layout_marginRight="12dp"/> android:layout_marginRight="4dp"/>
<TextView <TextView
android:id="@+id/label" android:id="@+id/label"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="0" android:layout_weight="0.1"
android:textSize="12sp" android:textSize="12sp"
android:textColor="@color/white" android:textColor="@color/white"
android:layout_marginLeft="6dp" android:layout_marginLeft="6dp"

@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!--Generated by crowdin.com-->
<resources>
<string name="app_name">Loop - Gewoonte Boekhouer</string> <string name="app_name">Loop - Gewoonte Boekhouer</string>
<string name="main_activity_title">Gewoontes</string> <string name="main_activity_title">Gewoontes</string>
<string name="action_settings">Instellings</string> <string name="action_settings">Instellings</string>
@ -30,12 +28,7 @@
<string name="add_habit">Voeg gewoonte by</string> <string name="add_habit">Voeg gewoonte by</string>
<string name="color_picker_default_title">Verander kleur</string> <string name="color_picker_default_title">Verander kleur</string>
<string name="toast_habit_created">Gewoonte geskep</string> <string name="toast_habit_created">Gewoonte geskep</string>
<string name="toast_habit_deleted">Gewoontes verwyder</string>
<string name="toast_habit_changed">Gewoonte verander</string>
<string name="toast_habit_archived">Gewoontes geargiveer</string>
<string name="toast_habit_unarchived">Gewoontes gedeargiveer</string>
<string name="overview">Oorsig</string> <string name="overview">Oorsig</string>
<!-- App introduction -->
<string name="intro_title_1">Welkom</string> <string name="intro_title_1">Welkom</string>
<string name="interval_15_minutes">15 minute</string> <string name="interval_15_minutes">15 minute</string>
<string name="interval_30_minutes">30 minute</string> <string name="interval_30_minutes">30 minute</string>
@ -45,6 +38,4 @@
<string name="interval_8_hour">8 ure</string> <string name="interval_8_hour">8 ure</string>
<string name="interval_24_hour">24 ure</string> <string name="interval_24_hour">24 ure</string>
<string name="settings">Instellings</string> <string name="settings">Instellings</string>
<!-- Different types of habits -->
<!-- Middle part of the sentence '1 time in xx days' -->
</resources> </resources>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> ~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~ ~
~ This file is part of Loop Habit Tracker. ~ This file is part of Loop Habit Tracker.
~ ~
@ -17,7 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop Habit Tracker</string> <string name="app_name">Loop Habit Tracker</string>
<string name="main_activity_title">عادات</string> <string name="main_activity_title">عادات</string>
<string name="action_settings">إعدادات</string> <string name="action_settings">إعدادات</string>
@ -28,19 +28,15 @@
<string name="add_habit">إضافة عادة</string> <string name="add_habit">إضافة عادة</string>
<string name="color_picker_default_title">تغيير اللون</string> <string name="color_picker_default_title">تغيير اللون</string>
<string name="toast_habit_created">تم إنشاء عادة</string> <string name="toast_habit_created">تم إنشاء عادة</string>
<string name="toast_habit_deleted">تم حذف العادات</string>
<string name="toast_habit_changed">تم تغيير عادة</string>
<string name="toast_habit_archived">تم أرشفه العادات </string>
<string name="toast_habit_unarchived">تم الغاء ارشفه العادات </string>
<string name="overview">نظرة عامة</string> <string name="overview">نظرة عامة</string>
<string name="habit_strength">قوة العادة</string> <string name="habit_strength">قوة العادة</string>
<string name="history">السجل</string> <string name="history">السجل</string>
<string name="clear">إزالة</string> <string name="clear">إزالة</string>
<string name="days">أيام</string>
<string name="reminder">تذكير</string> <string name="reminder">تذكير</string>
<string name="save">حفظ</string> <string name="save">حفظ</string>
<string name="streaks">الإنجازات </string> <string name="streaks">الإنجازات </string>
<string name="no_habits_found"> لا يوجد لديك عادات مفعله</string> <string name="no_habits_found"> لا يوجد لديك عادات مفعله</string>
<string name="no_habits_left_to_do">لقد أنهيت ألعمل لليوم</string>
<string name="long_press_to_toggle">إلمس و إستمر لتحقق أو ازل. </string> <string name="long_press_to_toggle">إلمس و إستمر لتحقق أو ازل. </string>
<string name="reminder_off">إيقاف</string> <string name="reminder_off">إيقاف</string>
<string name="create_habit">انشاء العادة</string> <string name="create_habit">انشاء العادة</string>
@ -64,20 +60,16 @@
<string name="interval_custom">مخصص... </string> <string name="interval_custom">مخصص... </string>
<string name="pref_toggle_title">تبديل وضعية العادة بضغطة قصيرة </string> <string name="pref_toggle_title">تبديل وضعية العادة بضغطة قصيرة </string>
<string name="pref_toggle_description">وضع علامات الاختيار الموجودة بنقرة واحدة بدلاً من الصحافة وعقد. أكثر ملاءمة، ولكن قد يتسبب في تبديل عرضي. </string> <string name="pref_toggle_description">وضع علامات الاختيار الموجودة بنقرة واحدة بدلاً من الصحافة وعقد. أكثر ملاءمة، ولكن قد يتسبب في تبديل عرضي. </string>
<string name="pref_snooze_interval_title">فترتي الغفوى على التذكير </string>
<string name="pref_rate_this_app">تقييم هذا التطبيق على جوجل بلاي </string> <string name="pref_rate_this_app">تقييم هذا التطبيق على جوجل بلاي </string>
<string name="pref_send_feedback">أرسل الملاحظات إلى المطور </string> <string name="pref_send_feedback">أرسل الملاحظات إلى المطور </string>
<string name="pref_view_source_code">إفحص التعليمات البرمجية على GitHub </string> <string name="pref_view_source_code">إفحص التعليمات البرمجية على GitHub </string>
<string name="links">روابط </string> <string name="links">روابط </string>
<string name="name">اسم </string> <string name="name">اسم </string>
<string name="settings">إعدادات</string> <string name="settings">إعدادات</string>
<string name="snooze_interval">فترتي الغفوه </string>
<string name="select_snooze_delay">حدد تأخير الغفوة </string> <string name="select_snooze_delay">حدد تأخير الغفوة </string>
<string name="hint_title">هل كنت تعلم؟ </string> <string name="hint_title">هل كنت تعلم؟ </string>
<string name="hint_drag">لإعادة ترتيب القوائم، أضغط اسم من هذه العادة، ثم اسحبه إلى المكان الصحيح. </string> <string name="hint_drag">لإعادة ترتيب القوائم، أضغط اسم من هذه العادة، ثم اسحبه إلى المكان الصحيح. </string>
<string name="hint_landscape">يمكنك ان ترى المزيد أيام عن طريق وضع الهاتف في وضع أفقي. </string> <string name="hint_landscape">يمكنك ان ترى المزيد أيام عن طريق وضع الهاتف في وضع أفقي. </string>
<string name="delete_habits">حذف عادات </string>
<string name="delete_habits_message">سيتم حذف عادات بشكل دائم. هذا العمل لا يمكن التراجع عنه. </string>
<string name="habit_not_found">العادة حذفت/لم يتم العثور عليها </string> <string name="habit_not_found">العادة حذفت/لم يتم العثور عليها </string>
<string name="weekends">عطلة نهاية الأسبوع </string> <string name="weekends">عطلة نهاية الأسبوع </string>
<string name="any_weekday">أيام الأسبوع. </string> <string name="any_weekday">أيام الأسبوع. </string>
@ -111,7 +103,7 @@
<string name="generate_bug_report">توليد تقرير الاعطال. </string> <string name="generate_bug_report">توليد تقرير الاعطال. </string>
<string name="troubleshooting">استكشاف الأخطاء وإصلاحها. </string> <string name="troubleshooting">استكشاف الأخطاء وإصلاحها. </string>
<string name="help_translate">المساعدة في ترجمة هذا البرنامج. </string> <string name="help_translate">المساعدة في ترجمة هذا البرنامج. </string>
<string name="night_mode">الوضع الليلي. </string> <string name="night_mode" comment="dark_theme">الوضع الليلي. </string>
<string name="use_pure_black">استخدام أسود نقي في الوضع الليلي. </string> <string name="use_pure_black">استخدام أسود نقي في الوضع الليلي. </string>
<string name="pure_black_description">يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED. .</string> <string name="pure_black_description">يستبدل خلفيات رمادية مع أسود نقي في الوضع الليلي. يقلل من استهلاك البطارية في الهواتف مع شاشة AMOLED. .</string>
<string name="interface_preferences">السطح البيني. </string> <string name="interface_preferences">السطح البيني. </string>
@ -147,6 +139,7 @@
<string name="by_name">حسب الإسم </string> <string name="by_name">حسب الإسم </string>
<string name="by_color">حسب اللون </string> <string name="by_color">حسب اللون </string>
<string name="by_score">حسب النقاط </string> <string name="by_score">حسب النقاط </string>
<string name="by_status">حسب الحالة</string>
<string name="export">استخراج </string> <string name="export">استخراج </string>
<string name="long_press_to_edit">اضغط مع الاستمرار لتغيرالقيمه</string> <string name="long_press_to_edit">اضغط مع الاستمرار لتغيرالقيمه</string>
<string name="change_value">تغيير القيمة </string> <string name="change_value">تغيير القيمة </string>
@ -170,16 +163,29 @@
<string name="example_notes">(اختياري)</string> <string name="example_notes">(اختياري)</string>
<string name="yes_or_no_example">مثلا: هل استيقظت باكرا اليوم؟ هل مارست الرياضة؟ هل لعبت الشطرنج؟</string> <string name="yes_or_no_example">مثلا: هل استيقظت باكرا اليوم؟ هل مارست الرياضة؟ هل لعبت الشطرنج؟</string>
<string name="measurable">قابل للقياس</string> <string name="measurable">قابل للقياس</string>
<string name="measurable_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot;">مثلا: كم كيلومتراً قطعته اليوم؟ كم صفحة قرأتها؟ كم عدد السعرات الحرارية التي أكلتها؟</string> <string name="measurable_example">مثال، كم ميلاً قطعته اليوم؟ كم عدد الصفحات التي قرأتها؟</string>
<string name="x_times_per_week">%d مرة في الأسبوع</string> <string name="x_times_per_week">%d مرة في الأسبوع</string>
<string name="x_times_per_month">%d مرة في الشهر</string> <string name="x_times_per_month">%d مرة في الشهر</string>
<string name="yes_or_no_short_example">مثال: التمرين</string> <string name="yes_or_no_short_example">مثال: التمرين</string>
<string name="color">اللون</string> <string name="color">اللون</string>
<string name="example_target">مثال: 15</string> <string name="example_target">مثال: 15</string>
<string name="measurable_short_example">مثلا: الجري</string> <string name="measurable_short_example">مثلا: الجري</string>
<string name="measurable_question_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot; if that is more common in your country">مثلا: كم كيلومترًا جريته اليوم؟</string> <string name="measurable_question_example">مثلا: كم كيلومترًا جريته اليوم؟</string>
<string name="measurable_units_example" comment="Feel free to replace by &quot;km&quot; if that is more common in your country">مثلا: كيلومترات</string> <string name="measurable_units_example">مثلا: كيلومترات</string>
<string name="every_month">كل شهر</string> <string name="every_month">كل شهر</string>
<string name="validation_cannot_be_blank">لا يمكن أن يكون الإسم فارغًا</string> <string name="validation_cannot_be_blank">لا يمكن أن يكون الإسم فارغًا</string>
<string name="today">اليوم</string> <string name="today">اليوم</string>
<string name="enter">ادخل</string>
<string name="no_habits">لا توجد عادات</string>
<string name="no_numerical_habits">لا توجد عادات قابلة للقياس</string>
<string name="no_boolean_habits">لا توجد عادات تجاوب بنعم أو لا</string>
<string name="increment">زيادة</string>
<string name="decrement">إنقاص</string>
<string name="pref_skip_title">تمكين أيام التخطي</string>
<string name="pref_skip_description">بدّل مرتين لإضافة تخطي بدلاً من علامة اختيار. التخطيات تحافظ على درجاتك دون تغيير أو خسارة سلسلة الانتصارات.</string>
<string name="pref_unknown_title">إظهار علامات الاستفهام للبيانات المفقودة</string>
<string name="you_are_now_a_developer">أنت الآن مطوَِر برمجيات!</string>
<string name="activity_not_found">لم يتم العثور على تطبيق لإتمام هذا الإجراء</string>
<string name="pref_midnight_delay_title">تمديد اليوم بضع ساعات بعد منتصف الليل</string>
<string name="pref_midnight_delay_description">انتظر حتى 3:00 صباحاً لعرض يوم جديد. مفيد إذا كنت عادة تذهب إلى السكون بعد منتصف الليل. يتطلب إعادة تشغيل التطبيق.</string>
</resources> </resources>

@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!--Generated by crowdin.com-->
<resources>
<string name="app_name">Loop Следене на навици</string> <string name="app_name">Loop Следене на навици</string>
<string name="main_activity_title">Навици</string> <string name="main_activity_title">Навици</string>
<string name="action_settings">Настройки</string> <string name="action_settings">Настройки</string>
@ -30,16 +28,10 @@
<string name="add_habit">Добавяне на навик</string> <string name="add_habit">Добавяне на навик</string>
<string name="color_picker_default_title">Промяна на цвят</string> <string name="color_picker_default_title">Промяна на цвят</string>
<string name="toast_habit_created">Навикът е създаден</string> <string name="toast_habit_created">Навикът е създаден</string>
<string name="toast_habit_deleted">Навиците са изтрити</string>
<string name="toast_habit_changed">Навикът е променен</string>
<string name="toast_habit_archived">Навиците са архивирани</string>
<string name="toast_habit_unarchived">Навиците са разархивирани</string>
<string name="overview">Обзор</string> <string name="overview">Обзор</string>
<string name="habit_strength">Сила на навика</string> <string name="habit_strength">Сила на навика</string>
<string name="history">История</string> <string name="history">История</string>
<string name="clear">Изчистване</string> <string name="clear">Изчистване</string>
<string name="times_every">пъти в период от</string>
<string name="days">дни</string>
<string name="reminder">Напомняне</string> <string name="reminder">Напомняне</string>
<string name="save">Запазване</string> <string name="save">Запазване</string>
<string name="streaks">Поредици</string> <string name="streaks">Поредици</string>
@ -50,7 +42,6 @@
<string name="edit_habit">Редактиране на навик</string> <string name="edit_habit">Редактиране на навик</string>
<string name="check">Поставяне на отметка</string> <string name="check">Поставяне на отметка</string>
<string name="snooze">По-късно</string> <string name="snooze">По-късно</string>
<!-- App introduction -->
<string name="intro_title_1">Добре дошли</string> <string name="intro_title_1">Добре дошли</string>
<string name="intro_description_1">Loop Следене на навици ви помага да създавате и поддържате добри навици.</string> <string name="intro_description_1">Loop Следене на навици ви помага да създавате и поддържате добри навици.</string>
<string name="intro_title_2">Създайте нови навици</string> <string name="intro_title_2">Създайте нови навици</string>
@ -75,8 +66,6 @@
<string name="hint_title">Знаете ли че?</string> <string name="hint_title">Знаете ли че?</string>
<string name="hint_drag">За да пренаредите записите, натиснете и задръжте върху името на навика и го придърпайте до правилното място.</string> <string name="hint_drag">За да пренаредите записите, натиснете и задръжте върху името на навика и го придърпайте до правилното място.</string>
<string name="hint_landscape">Може да виждате повече дни като обърнете телефона си в хоризонтално положение.</string> <string name="hint_landscape">Може да виждате повече дни като обърнете телефона си в хоризонтално положение.</string>
<string name="delete_habits">Изтриване на навици</string>
<string name="delete_habits_message">Навиците ще се изтрият перманентно. Това действие не може да бъде отменено.</string>
<string name="habit_not_found">Навикът е изтрит / не е намерен</string> <string name="habit_not_found">Навикът е изтрит / не е намерен</string>
<string name="weekends">Събота и неделя</string> <string name="weekends">Събота и неделя</string>
<string name="any_weekday">От понеделник до петък</string> <string name="any_weekday">От понеделник до петък</string>
@ -110,7 +99,7 @@
<string name="generate_bug_report">Генериране на доклад за грешки</string> <string name="generate_bug_report">Генериране на доклад за грешки</string>
<string name="troubleshooting">Отстраняване на проблеми</string> <string name="troubleshooting">Отстраняване на проблеми</string>
<string name="help_translate">Помагане за превода на това приложение</string> <string name="help_translate">Помагане за превода на това приложение</string>
<string name="night_mode">Нощен режим</string> <string name="night_mode" comment="dark_theme">Нощен режим</string>
<string name="use_pure_black">Използване на чисто черно при нощен режим</string> <string name="use_pure_black">Използване на чисто черно при нощен режим</string>
<string name="pure_black_description">Заменя сивите фонове с чисто черни при нощен режим. Намаля разхода на батерията при телефони с AMOLED дисплеи.</string> <string name="pure_black_description">Заменя сивите фонове с чисто черни при нощен режим. Намаля разхода на батерията при телефони с AMOLED дисплеи.</string>
<string name="interface_preferences">Интерфейс</string> <string name="interface_preferences">Интерфейс</string>
@ -122,8 +111,6 @@
<string name="quarter">Тримесечие</string> <string name="quarter">Тримесечие</string>
<string name="year">Година</string> <string name="year">Година</string>
<string name="total">Общо</string> <string name="total">Общо</string>
<!-- Different types of habits -->
<!-- Middle part of the sentence '1 time in xx days' -->
<string name="every_x_days">На всеки %d дни</string> <string name="every_x_days">На всеки %d дни</string>
<string name="every_x_weeks">На всеки %d седмици</string> <string name="every_x_weeks">На всеки %d седмици</string>
<string name="score">Сила</string> <string name="score">Сила</string>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> ~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~ ~
~ This file is part of Loop Habit Tracker. ~ This file is part of Loop Habit Tracker.
~ ~
@ -17,7 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop - Hàbit Rastrejador</string> <string name="app_name">Loop - Hàbit Rastrejador</string>
<string name="main_activity_title">Hàbits</string> <string name="main_activity_title">Hàbits</string>
<string name="action_settings">Configuració</string> <string name="action_settings">Configuració</string>
@ -28,19 +28,23 @@
<string name="add_habit">Afegir hàbit</string> <string name="add_habit">Afegir hàbit</string>
<string name="color_picker_default_title">Canviar color</string> <string name="color_picker_default_title">Canviar color</string>
<string name="toast_habit_created">Hàbit creat.</string> <string name="toast_habit_created">Hàbit creat.</string>
<string name="toast_habit_deleted">Hàbits esborrats.</string> <plurals name="toast_habits_changed">
<string name="toast_habit_changed">Hàbit modificat.</string> <item quantity="one">Hàbit modificat.</item>
<string name="toast_habit_archived">Hàbits arxivats.</string> <item quantity="other">Hàbit modificat.</item>
<string name="toast_habit_unarchived">Hàbits trets de l\'arxiu.</string> </plurals>
<plurals name="toast_habits_unarchived">
<item quantity="one">Hàbit no arxivat</item>
<item quantity="other">Hàbit no arxivat</item>
</plurals>
<string name="overview">Visió general</string> <string name="overview">Visió general</string>
<string name="habit_strength">Fortalesa de l\'hàbit</string> <string name="habit_strength">Fortalesa de l\'hàbit</string>
<string name="history">Història</string> <string name="history">Història</string>
<string name="clear">Netejar</string> <string name="clear">Netejar</string>
<string name="days">dies</string>
<string name="reminder">Recordatori</string> <string name="reminder">Recordatori</string>
<string name="save">Desar</string> <string name="save">Desar</string>
<string name="streaks">Ratxa</string> <string name="streaks">Ratxa</string>
<string name="no_habits_found">No tens hàbits actius</string> <string name="no_habits_found">No tens hàbits actius</string>
<string name="no_habits_left_to_do">Ja heu acabat per avui!</string>
<string name="long_press_to_toggle">Prem i manté per a marcar o desmarcar</string> <string name="long_press_to_toggle">Prem i manté per a marcar o desmarcar</string>
<string name="reminder_off">Desactivat</string> <string name="reminder_off">Desactivat</string>
<string name="create_habit">Crear hàbit</string> <string name="create_habit">Crear hàbit</string>
@ -64,20 +68,20 @@
<string name="interval_custom">Personalitza...</string> <string name="interval_custom">Personalitza...</string>
<string name="pref_toggle_title">Activar/desactivar repeticions prement curt</string> <string name="pref_toggle_title">Activar/desactivar repeticions prement curt</string>
<string name="pref_toggle_description">Posar les marques de verificació amb un sol toc enlloc de prémer i mantenir. Més adequat, però pot causar activacions accidentals.</string> <string name="pref_toggle_description">Posar les marques de verificació amb un sol toc enlloc de prémer i mantenir. Més adequat, però pot causar activacions accidentals.</string>
<string name="pref_snooze_interval_title">Interval d\'endarreriment en recordatoris</string>
<string name="pref_rate_this_app">Valora aquesta app a Google Play</string> <string name="pref_rate_this_app">Valora aquesta app a Google Play</string>
<string name="pref_send_feedback">Enviar resposta al desenvolupador</string> <string name="pref_send_feedback">Enviar resposta al desenvolupador</string>
<string name="pref_view_source_code">Veure codi font a Github</string> <string name="pref_view_source_code">Veure codi font a Github</string>
<string name="links">Enllaços</string> <string name="links">Enllaços</string>
<string name="name">Nom</string> <string name="name">Nom</string>
<string name="settings">Ajustaments</string> <string name="settings">Ajustaments</string>
<string name="snooze_interval">Interval d\'endarreriment</string>
<string name="select_snooze_delay">Selecciona el retard de l\'endarreriment</string> <string name="select_snooze_delay">Selecciona el retard de l\'endarreriment</string>
<string name="hint_title">Ho sabies?</string> <string name="hint_title">Ho sabies?</string>
<string name="hint_drag">Per a ordenar les entrades, prem i mantè sobre el nom de l\'hàbit, després arrossega\'l al lloc correcte.</string> <string name="hint_drag">Per a ordenar les entrades, prem i mantè sobre el nom de l\'hàbit, després arrossega\'l al lloc correcte.</string>
<string name="hint_landscape">Pots veure més dies posant el teu telèfon en orientació apaisada.</string> <string name="hint_landscape">Pots veure més dies posant el teu telèfon en orientació apaisada.</string>
<string name="delete_habits">Esborrar hàbits</string> <plurals name="delete_habits_title">
<string name="delete_habits_message">Els hàbits seran esborrats permanentment. Aquesta acció no es pot desfer.</string> <item quantity="one">Esborrar hàbit</item>
<item quantity="other">Esborrar hàbit</item>
</plurals>
<string name="habit_not_found">Hàbit suprimit / no trobat</string> <string name="habit_not_found">Hàbit suprimit / no trobat</string>
<string name="weekends">Caps de setmana</string> <string name="weekends">Caps de setmana</string>
<string name="any_weekday">Dilluns a divendres</string> <string name="any_weekday">Dilluns a divendres</string>
@ -111,7 +115,7 @@
<string name="generate_bug_report">Generar informe d\'error</string> <string name="generate_bug_report">Generar informe d\'error</string>
<string name="troubleshooting">Resolució de problemes</string> <string name="troubleshooting">Resolució de problemes</string>
<string name="help_translate">Ajuda a traduïr aquesta app</string> <string name="help_translate">Ajuda a traduïr aquesta app</string>
<string name="night_mode">Mode nocturn</string> <string name="night_mode" comment="dark_theme">Mode nocturn</string>
<string name="use_pure_black">Utilitzar negre pur en el mode nocturn</string> <string name="use_pure_black">Utilitzar negre pur en el mode nocturn</string>
<string name="pure_black_description">Reemplaça fons grisos per negre pur en el mode nocturn. Redueix consum de bateria en telèfons amb pantalla AMOLED.</string> <string name="pure_black_description">Reemplaça fons grisos per negre pur en el mode nocturn. Redueix consum de bateria en telèfons amb pantalla AMOLED.</string>
<string name="interface_preferences">Interfície</string> <string name="interface_preferences">Interfície</string>
@ -147,6 +151,7 @@
<string name="by_name">Per nom</string> <string name="by_name">Per nom</string>
<string name="by_color">Pel color</string> <string name="by_color">Pel color</string>
<string name="by_score">Per marcador</string> <string name="by_score">Per marcador</string>
<string name="by_status">Per estat</string>
<string name="export">Exportar</string> <string name="export">Exportar</string>
<string name="long_press_to_edit">Prémer i mantenir per a canviar el valor</string> <string name="long_press_to_edit">Prémer i mantenir per a canviar el valor</string>
<string name="change_value">Canviar el valor</string> <string name="change_value">Canviar el valor</string>
@ -170,15 +175,14 @@
<string name="example_notes">Opcional</string> <string name="example_notes">Opcional</string>
<string name="yes_or_no_example">Per exemple, us heu despertat aviat? Heu fet exercici? Heu jugat a escacs?</string> <string name="yes_or_no_example">Per exemple, us heu despertat aviat? Heu fet exercici? Heu jugat a escacs?</string>
<string name="measurable">Mesurable</string> <string name="measurable">Mesurable</string>
<string name="measurable_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot;">Per exemple, quants quilòmetres heu recorregut avui? Quantes pàgines heu llegit? Quantes calories heu menjat?</string>
<string name="x_times_per_week">%d vegades per setmana</string> <string name="x_times_per_week">%d vegades per setmana</string>
<string name="x_times_per_month">%d vegades al mes</string> <string name="x_times_per_month">%d vegades al mes</string>
<string name="yes_or_no_short_example">Ex. Exercici</string> <string name="yes_or_no_short_example">Ex. Exercici</string>
<string name="color">Color</string> <string name="color">Color</string>
<string name="example_target">ex. 15</string> <string name="example_target">ex. 15</string>
<string name="measurable_short_example">Per exemple: córrer</string> <string name="measurable_short_example">Per exemple: córrer</string>
<string name="measurable_question_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot; if that is more common in your country">Per exemple, quants quilòmetres heu recorregut avui?</string> <string name="measurable_question_example">Per exemple, quants quilòmetres heu recorregut avui?</string>
<string name="measurable_units_example" comment="Feel free to replace by &quot;km&quot; if that is more common in your country">per exemple, quilòmetres</string> <string name="measurable_units_example">per exemple, quilòmetres</string>
<string name="every_month">Cada mes</string> <string name="every_month">Cada mes</string>
<string name="validation_cannot_be_blank">No es pot deixar en blanc</string> <string name="validation_cannot_be_blank">No es pot deixar en blanc</string>
<string name="today">Avui</string> <string name="today">Avui</string>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> ~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~ ~
~ This file is part of Loop Habit Tracker. ~ This file is part of Loop Habit Tracker.
~ ~
@ -17,7 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop Habit Tracker</string> <string name="app_name">Loop Habit Tracker</string>
<string name="main_activity_title">Zvyky</string> <string name="main_activity_title">Zvyky</string>
<string name="action_settings">Nastavení</string> <string name="action_settings">Nastavení</string>
@ -28,15 +28,10 @@
<string name="add_habit">Přidat zvyk</string> <string name="add_habit">Přidat zvyk</string>
<string name="color_picker_default_title">Změnit barvu</string> <string name="color_picker_default_title">Změnit barvu</string>
<string name="toast_habit_created">Zvyk vytvořen.</string> <string name="toast_habit_created">Zvyk vytvořen.</string>
<string name="toast_habit_deleted">Zvyky smazány.</string>
<string name="toast_habit_changed">Zvyk změněn.</string>
<string name="toast_habit_archived">Archivováno.</string>
<string name="toast_habit_unarchived">Zvyky obnoveny.</string>
<string name="overview">Přehled</string> <string name="overview">Přehled</string>
<string name="habit_strength">Síla zvyku</string> <string name="habit_strength">Síla zvyku</string>
<string name="history">Historie</string> <string name="history">Historie</string>
<string name="clear">Smazat</string> <string name="clear">Smazat</string>
<string name="days">dní</string>
<string name="reminder">Připomenutí</string> <string name="reminder">Připomenutí</string>
<string name="save">Uložit</string> <string name="save">Uložit</string>
<string name="streaks">Série</string> <string name="streaks">Série</string>
@ -64,20 +59,16 @@
<string name="interval_custom">Vlastní...</string> <string name="interval_custom">Vlastní...</string>
<string name="pref_toggle_title">Označte opakování krátkým stisknutím</string> <string name="pref_toggle_title">Označte opakování krátkým stisknutím</string>
<string name="pref_toggle_description">Praktičtější, ale může způsobit nechtěné označení.</string> <string name="pref_toggle_description">Praktičtější, ale může způsobit nechtěné označení.</string>
<string name="pref_snooze_interval_title">Doba odložení upomínky</string>
<string name="pref_rate_this_app">Ohodnoťte nás v Google Play</string> <string name="pref_rate_this_app">Ohodnoťte nás v Google Play</string>
<string name="pref_send_feedback">Zpětná vazba vývojáři</string> <string name="pref_send_feedback">Zpětná vazba vývojáři</string>
<string name="pref_view_source_code">Zobrazit zdroj. kód na GitHub</string> <string name="pref_view_source_code">Zobrazit zdroj. kód na GitHub</string>
<string name="links">Odkazy</string> <string name="links">Odkazy</string>
<string name="name">Jméno</string> <string name="name">Jméno</string>
<string name="settings">Nastavení</string> <string name="settings">Nastavení</string>
<string name="snooze_interval">Interval odkladu</string>
<string name="select_snooze_delay">Nastavit délku odložení</string> <string name="select_snooze_delay">Nastavit délku odložení</string>
<string name="hint_title">Věděli jste?</string> <string name="hint_title">Věděli jste?</string>
<string name="hint_drag">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.</string> <string name="hint_drag">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.</string>
<string name="hint_landscape">Můžeš vidět více dnů otočením telefonu na šířku.</string> <string name="hint_landscape">Můžeš vidět více dnů otočením telefonu na šířku.</string>
<string name="delete_habits">Smazat zvyky</string>
<string name="delete_habits_message">Označené zvyky budou navždy odstraněny. Toto nelze vzít zpět.</string>
<string name="habit_not_found">Zvyk smazán / nenalezen</string> <string name="habit_not_found">Zvyk smazán / nenalezen</string>
<string name="weekends">Víkendy</string> <string name="weekends">Víkendy</string>
<string name="any_weekday">Pondělí až pátek</string> <string name="any_weekday">Pondělí až pátek</string>
@ -111,7 +102,7 @@
<string name="generate_bug_report">Generovat výpis chyb</string> <string name="generate_bug_report">Generovat výpis chyb</string>
<string name="troubleshooting">Řešení problémů</string> <string name="troubleshooting">Řešení problémů</string>
<string name="help_translate">Pomozte s překladem aplikace</string> <string name="help_translate">Pomozte s překladem aplikace</string>
<string name="night_mode">Noční téma</string> <string name="night_mode" comment="dark_theme">Noční téma</string>
<string name="use_pure_black">Zobrazit čistě černou v nočním tématu</string> <string name="use_pure_black">Zobrazit čistě černou v nočním tématu</string>
<string name="pure_black_description">Nahradí šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem.</string> <string name="pure_black_description">Nahradí šedé pozadí čistou černou v nočním tématu. Snižuje spotřebu baterie v telefonech s AMOLED displejem.</string>
<string name="interface_preferences">Rozhraní</string> <string name="interface_preferences">Rozhraní</string>
@ -170,16 +161,16 @@
<string name="example_notes">(nepovinné)</string> <string name="example_notes">(nepovinné)</string>
<string name="yes_or_no_example">např. Vzbudil ses dnes brzy? Cvičil jsi dnes? Hrál jsi šachy?</string> <string name="yes_or_no_example">např. Vzbudil ses dnes brzy? Cvičil jsi dnes? Hrál jsi šachy?</string>
<string name="measurable">Měřitelný</string> <string name="measurable">Měřitelný</string>
<string name="measurable_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot;">např. Kolik kilometrů jsi dnes uběhl? Kolik stránek jsi přečetl? Kolik kalorií jsi snědl?</string>
<string name="x_times_per_week">%d krát týdně</string> <string name="x_times_per_week">%d krát týdně</string>
<string name="x_times_per_month">%d krát za měsíc</string> <string name="x_times_per_month">%d krát za měsíc</string>
<string name="yes_or_no_short_example">např. Cvičení</string> <string name="yes_or_no_short_example">např. Cvičení</string>
<string name="color">Barva</string> <string name="color">Barva</string>
<string name="example_target">např. 15</string> <string name="example_target">např. 15</string>
<string name="measurable_short_example">např. Běh</string> <string name="measurable_short_example">např. Běh</string>
<string name="measurable_question_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot; if that is more common in your country">Např. kolik mil jste dnes uběhl?</string> <string name="measurable_question_example">Např. kolik mil jste dnes uběhl?</string>
<string name="measurable_units_example" comment="Feel free to replace by &quot;km&quot; if that is more common in your country">např. míle</string> <string name="measurable_units_example">např. míle</string>
<string name="every_month">Každý měsíc</string> <string name="every_month">Každý měsíc</string>
<string name="validation_cannot_be_blank">Musíte vyplnit</string> <string name="validation_cannot_be_blank">Musíte vyplnit</string>
<string name="today">Dnes</string> <string name="today">Dnes</string>
<string name="you_are_now_a_developer">Nyní jste vývojář</string>
</resources> </resources>

@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!--Generated by crowdin.com-->
<resources>
<string name="app_name">Loop Vane Tracker</string> <string name="app_name">Loop Vane Tracker</string>
<string name="main_activity_title">Vaner</string> <string name="main_activity_title">Vaner</string>
<string name="action_settings">Indstillinger</string> <string name="action_settings">Indstillinger</string>
@ -30,27 +28,37 @@
<string name="add_habit">Tilføj vane</string> <string name="add_habit">Tilføj vane</string>
<string name="color_picker_default_title">Skift farve</string> <string name="color_picker_default_title">Skift farve</string>
<string name="toast_habit_created">Vanen er skabt.</string> <string name="toast_habit_created">Vanen er skabt.</string>
<string name="toast_habit_deleted">Vaner slettet</string> <plurals name="toast_habits_changed">
<string name="toast_habit_changed">Vanen er ændret</string> <item quantity="one">Vanen er ændret</item>
<string name="toast_habit_archived">Vanerne er arkiveret</string> <item quantity="other">Vanerne er ændret</item>
<string name="toast_habit_unarchived">Vanerne er fjernet fra arkivet</string> </plurals>
<plurals name="toast_habits_deleted">
<item quantity="one">Vanen er slettet</item>
<item quantity="other">Vanerne er slettet</item>
</plurals>
<plurals name="toast_habits_archived">
<item quantity="one">Vanen er arkiveret</item>
<item quantity="other">Vanerne er arkiveret</item>
</plurals>
<plurals name="toast_habits_unarchived">
<item quantity="one">Vane taget ud fra arkiv</item>
<item quantity="other">Vaner taget ud fra arkiv</item>
</plurals>
<string name="overview">Overblik</string> <string name="overview">Overblik</string>
<string name="habit_strength">Vanestyrke</string> <string name="habit_strength">Vanestyrke</string>
<string name="history">Historie</string> <string name="history">Historie</string>
<string name="clear">Ryd</string> <string name="clear">Ryd</string>
<string name="times_every">gange på</string>
<string name="days">dage</string>
<string name="reminder">Påmindelse</string> <string name="reminder">Påmindelse</string>
<string name="save">Gem</string> <string name="save">Gem</string>
<string name="streaks">Streaks</string> <string name="streaks">Streaks</string>
<string name="no_habits_found">Du har ingen aktive vaner</string> <string name="no_habits_found">Du har ingen aktive vaner</string>
<string name="no_habits_left_to_do">Du har klaret alt for i dag!</string>
<string name="long_press_to_toggle">Tryk og hold nede for at afkrydse</string> <string name="long_press_to_toggle">Tryk og hold nede for at afkrydse</string>
<string name="reminder_off">Fra</string> <string name="reminder_off">Fra</string>
<string name="create_habit">Opret vane</string> <string name="create_habit">Opret vane</string>
<string name="edit_habit">Rediger vane</string> <string name="edit_habit">Rediger vane</string>
<string name="check">Afkryds</string> <string name="check">Afkryds</string>
<string name="snooze">Senere</string> <string name="snooze">Senere</string>
<!-- App introduction -->
<string name="intro_title_1">Velkommen</string> <string name="intro_title_1">Velkommen</string>
<string name="intro_description_1">Loop Habit Tracker hjælper dig med at holde gode vaner.</string> <string name="intro_description_1">Loop Habit Tracker hjælper dig med at holde gode vaner.</string>
<string name="intro_title_2">Skab nogle nye vaner</string> <string name="intro_title_2">Skab nogle nye vaner</string>
@ -64,6 +72,8 @@
<string name="interval_4_hour">4 timer</string> <string name="interval_4_hour">4 timer</string>
<string name="interval_8_hour">8 timer</string> <string name="interval_8_hour">8 timer</string>
<string name="interval_24_hour">24 timer</string> <string name="interval_24_hour">24 timer</string>
<string name="interval_always_ask">Spørg altid</string>
<string name="interval_custom">Brugerdefineret...</string>
<string name="pref_toggle_title">Tjek vaner med kort tryk</string> <string name="pref_toggle_title">Tjek vaner med kort tryk</string>
<string name="pref_toggle_description">Sæt tjekmærker med et enkelt tryk i stedet for tryk-og-hold. Mere bekvemmeligt, men kan forårsage uhensigtede tryk.</string> <string name="pref_toggle_description">Sæt tjekmærker med et enkelt tryk i stedet for tryk-og-hold. Mere bekvemmeligt, men kan forårsage uhensigtede tryk.</string>
<string name="pref_rate_this_app">Bedøm denne app på Google Play</string> <string name="pref_rate_this_app">Bedøm denne app på Google Play</string>
@ -72,11 +82,18 @@
<string name="links">Henvisninger</string> <string name="links">Henvisninger</string>
<string name="name">Navn</string> <string name="name">Navn</string>
<string name="settings">Indstillinger</string> <string name="settings">Indstillinger</string>
<string name="select_snooze_delay">Vælg snooze-forsinkelse</string>
<string name="hint_title">Vidste du?</string> <string name="hint_title">Vidste du?</string>
<string name="hint_drag">For at omarrangere poster, tryk og hold på navnet på den vane, og træk den til det korrekte sted.</string> <string name="hint_drag">For at omarrangere poster, tryk og hold på navnet på den vane, og træk den til det korrekte sted.</string>
<string name="hint_landscape">Du kan se flere dage ved at sætte telefonen i liggende tilstand.</string> <string name="hint_landscape">Du kan se flere dage ved at sætte telefonen i liggende tilstand.</string>
<string name="delete_habits">Slet vaner</string> <plurals name="delete_habits_title">
<string name="delete_habits_message">Vanerne vil blive slettet permanent. Denne handling kan ikke fortrydes.</string> <item quantity="one">Slet vane?</item>
<item quantity="other">Slet vaner?</item>
</plurals>
<plurals name="delete_habits_message">
<item quantity="one">Vanen vil blive slettet permanent. Denne handling kan ikke fortrydes.</item>
<item quantity="other">Vanerne vil blive slettet permanent. Denne handling kan ikke fortrydes.</item>
</plurals>
<string name="habit_not_found">Vane slettet / ikke fundet</string> <string name="habit_not_found">Vane slettet / ikke fundet</string>
<string name="weekends">Weekender</string> <string name="weekends">Weekender</string>
<string name="any_weekday">Mandag til Fredag</string> <string name="any_weekday">Mandag til Fredag</string>
@ -87,13 +104,22 @@
<string name="clear_label">Fjern</string> <string name="clear_label">Fjern</string>
<string name="select_hours">Vælg timer</string> <string name="select_hours">Vælg timer</string>
<string name="select_minutes">Vælg minutter</string> <string name="select_minutes">Vælg minutter</string>
<string-array name="hints">
<item>hints</item>
<item>hints</item>
</string-array>
<string name="about">Om</string> <string name="about">Om</string>
<string name="translators">Oversættere</string> <string name="translators">Oversættere</string>
<string name="developers">Udviklere</string> <string name="developers">Udviklere</string>
<string name="version_n">Version %s</string> <string name="version_n">Version %s</string>
<string name="frequency">Hyppighed</string> <string name="frequency">Hyppighed</string>
<string name="checkmark">Afkrydsning</string> <string name="checkmark">Afkrydsning</string>
<string name="best_streaks">Bedste striber</string> <string name="checkmark_stack_widget" formatted="false">Afkryds stakkontrol</string>
<string name="frequency_stack_widget" formatted="false">Frekvens stakkontrol</string>
<string name="score_stack_widget" formatted="false">Score stakkontrol</string>
<string name="history_stack_widget" formatted="false">Historik stakkontrol</string>
<string name="streaks_stack_widget" formatted="false">Uafbrudt række stakkontrol</string>
<string name="best_streaks">Bedste streak</string>
<string name="every_day">Hver dag</string> <string name="every_day">Hver dag</string>
<string name="every_week">Hver uge</string> <string name="every_week">Hver uge</string>
<string name="help">Hjælp &amp; FAQ</string> <string name="help">Hjælp &amp; FAQ</string>
@ -110,7 +136,7 @@
<string name="generate_bug_report">Generer fejlrapport</string> <string name="generate_bug_report">Generer fejlrapport</string>
<string name="troubleshooting">Fejlfinding</string> <string name="troubleshooting">Fejlfinding</string>
<string name="help_translate">Hjælpe med at oversætte denne app</string> <string name="help_translate">Hjælpe med at oversætte denne app</string>
<string name="night_mode">Nat-tilstand</string> <string name="night_mode" comment="dark_theme">Nat-tilstand</string>
<string name="use_pure_black">Brug ren sort i nat-tilstand</string> <string name="use_pure_black">Brug ren sort i nat-tilstand</string>
<string name="pure_black_description">Erstatter grå baggrunde med ren sort i nat-tilstand. Reducerer batteriforbruget i telefoner med AMOLED skærm.</string> <string name="pure_black_description">Erstatter grå baggrunde med ren sort i nat-tilstand. Reducerer batteriforbruget i telefoner med AMOLED skærm.</string>
<string name="interface_preferences">Grænseflade</string> <string name="interface_preferences">Grænseflade</string>
@ -122,8 +148,7 @@
<string name="quarter">Kvartal</string> <string name="quarter">Kvartal</string>
<string name="year">År</string> <string name="year">År</string>
<string name="total">I alt</string> <string name="total">I alt</string>
<!-- Different types of habits --> <string name="yes_or_no">Ja eller nej</string>
<!-- Middle part of the sentence '1 time in xx days' -->
<string name="every_x_days">Hver %d dage</string> <string name="every_x_days">Hver %d dage</string>
<string name="every_x_weeks">Hver %d uger</string> <string name="every_x_weeks">Hver %d uger</string>
<string name="score">Point</string> <string name="score">Point</string>
@ -134,6 +159,8 @@
<string name="hide_archived">Skjul arkiverede</string> <string name="hide_archived">Skjul arkiverede</string>
<string name="sticky_notifications">Fastgør notifikationer</string> <string name="sticky_notifications">Fastgør notifikationer</string>
<string name="sticky_notifications_description">Forhindrer notifikationer i at blive swipet væk.</string> <string name="sticky_notifications_description">Forhindrer notifikationer i at blive swipet væk.</string>
<string name="led_notifications">Notifikationslys</string>
<string name="led_notifications_description">Viser et blinkende lys til påmindelser. Kun tilgængelig i telefoner med LED-notifikationslyskilder.</string>
<string name="repair_database">Reparer database</string> <string name="repair_database">Reparer database</string>
<string name="database_repaired">Database repareret.</string> <string name="database_repaired">Database repareret.</string>
<string name="uncheck">Fjern afkrydsning</string> <string name="uncheck">Fjern afkrydsning</string>
@ -145,5 +172,54 @@
<string name="by_name">Efter navn</string> <string name="by_name">Efter navn</string>
<string name="by_color">Efter farve</string> <string name="by_color">Efter farve</string>
<string name="by_score">Efter score</string> <string name="by_score">Efter score</string>
<string name="by_status">Efter status</string>
<string name="export">Eksporter</string> <string name="export">Eksporter</string>
<string name="long_press_to_edit">Tryk-og-hold for at ændre værdien</string>
<string name="change_value">Skift værdi</string>
<string name="calendar">Kalender</string>
<string name="unit">Enhed</string>
<string name="example_question_boolean">f.eks. Har du trænet i dag?</string>
<string name="question">Spørgsmål</string>
<string name="target">Mål</string>
<string name="yes">Ja</string>
<string name="no">Nej</string>
<string name="customize_notification_summary">Skift lyd-, vibrations-, lys- og andre notifikationsindstillinger</string>
<string name="customize_notification">Tilpas notifikationer</string>
<string name="pref_view_privacy">Se privatlivspolitik</string>
<string name="view_all_contributors">Se alle bidragsydere&#8230;</string>
<string name="database">Database</string>
<string name="widget_opacity_title">Gennemsigtighed af widget</string>
<string name="widget_opacity_description">Gør widgets mere gennemsigtige eller mere uigennemsigtige på din startskærm.</string>
<string name="first_day_of_the_week">Første dag i ugen</string>
<string name="default_reminder_question">Har du fuldført denne vane i dag?</string>
<string name="notes">Noter</string>
<string name="example_notes">(Valgfrit)</string>
<string name="yes_or_no_example">F.eks. vågnede du tidligt i dag? Har du motioneret? Spillede du skak?</string>
<string name="measurable">Målbar</string>
<string name="measurable_example">f.eks Hvor mange kilometer kørte du i dag? Hvor mange sider læste du?</string>
<string name="x_times_per_week">%d gange om ugen</string>
<string name="x_times_per_month">%d gange om måneden</string>
<string name="yes_or_no_short_example">f.eks. Motion</string>
<string name="color">Farve</string>
<string name="example_target">f.eks. 15</string>
<string name="measurable_short_example">f.eks. Løb</string>
<string name="measurable_question_example">F.eks. Hvor mange kilometer har du løbet i dag?</string>
<string name="measurable_units_example">f.eks. kilometer</string>
<string name="every_month">Hver måned</string>
<string name="validation_cannot_be_blank">skal udfyldes</string>
<string name="today">I dag</string>
<string name="enter">Angiv</string>
<string name="no_habits">Ingen vaner fundet</string>
<string name="no_numerical_habits">Ingen målbare vaner fundet</string>
<string name="no_boolean_habits">Ingen ja-eller-nej vaner fundet</string>
<string name="increment">Forøgelse</string>
<string name="decrement">Formindskelse</string>
<string name="pref_skip_title">Slå overspring af dage til</string>
<string name="pref_skip_description">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.</string>
<string name="pref_unknown_title">Vis spørgsmålstegn for manglende data</string>
<string name="pref_unknown_description">Differentiér dage uden data fra faktiske udeladelser. For at indtaste en udeladelse, skiftes to gange.</string>
<string name="you_are_now_a_developer">Du er nu udvikler</string>
<string name="activity_not_found">Ingen app fundet til at understøtte denne handling</string>
<string name="pref_midnight_delay_title">Forlæng dagen et par timer efter midnat</string>
<string name="pref_midnight_delay_description">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.</string>
</resources> </resources>

@ -99,7 +99,7 @@
<string name="any_weekday">Montag bis Freitag</string> <string name="any_weekday">Montag bis Freitag</string>
<string name="any_day">Jeden Tag</string> <string name="any_day">Jeden Tag</string>
<string name="select_weekdays">Tage auswählen</string> <string name="select_weekdays">Tage auswählen</string>
<string name="export_to_csv">Daten als CSV exportieren</string> <string name="export_to_csv">Exportiere als CSV</string>
<string name="done_label">Fertig</string> <string name="done_label">Fertig</string>
<string name="clear_label">Löschen</string> <string name="clear_label">Löschen</string>
<string name="select_hours">Stunden auswählen</string> <string name="select_hours">Stunden auswählen</string>
@ -118,18 +118,18 @@
<string name="could_not_import">Fehler beim Importieren der Daten.</string> <string name="could_not_import">Fehler beim Importieren der Daten.</string>
<string name="file_not_recognized">Datei nicht erkannt.</string> <string name="file_not_recognized">Datei nicht erkannt.</string>
<string name="habits_imported">Gewohnheiten erfolgreich importiert.</string> <string name="habits_imported">Gewohnheiten erfolgreich importiert.</string>
<string name="import_data">Importiere Daten</string> <string name="import_data">Daten importieren</string>
<string name="export_full_backup">Exportiere vollständige Sicherung</string> <string name="export_full_backup">Exportiere vollständige Sicherung</string>
<string name="import_data_summary">Unterstützt vollständige Sicherungen dieser App, sowie von Tickmate, HabitBull und Rewire erzeugte Sicherungen. Siehe FAQ für weitere Informationen.</string> <string name="import_data_summary">Unterstützt vollständige Sicherungen dieser App, als auch von Tickmate, HabitBull und Rewire. Siehe FAQ für weitere Informationen.</string>
<string name="export_as_csv_summary">Erstellt Dateien, die von Tabellenkalkulationsprogrammen wie Microsoft Excel oder LibreOffice Calc geöffnet werden können. Diese Dateien können nicht wieder importiert werden.</string> <string name="export_as_csv_summary">Erstellt Dateien, die von Tabellenkalkulationsprogrammen wie Microsoft Excel oder LibreOffice Calc geöffnet werden können. Diese Dateien können nicht wieder importiert werden.</string>
<string name="export_full_backup_summary">Erstellt eine Datei, die alle deine Daten enthält. Diese Datei kann wieder importiert werden.</string> <string name="export_full_backup_summary">Erstellt eine Datei, die alle deine Daten enthält. Diese Datei kann wieder importiert werden.</string>
<string name="bug_report_failed">Fehler beim Erstellen eines Fehlerberichts.</string> <string name="bug_report_failed">Fehler beim Erstellen eines Fehlerberichts.</string>
<string name="generate_bug_report">Erstelle einen Fehlerbericht</string> <string name="generate_bug_report">Erstelle einen Fehlerbericht</string>
<string name="troubleshooting">Fehlerbehebung</string> <string name="troubleshooting">Fehlerbehebung</string>
<string name="help_translate">Hilf mit, diese App zu übersetzen</string> <string name="help_translate">Hilf mit, diese App zu übersetzen</string>
<string name="night_mode">Nachtmodus</string> <string name="night_mode" comment="dark_theme">Nachtmodus</string>
<string name="use_pure_black">Verwende reines Schwarz im Nachtmodus</string> <string name="use_pure_black">Verwende reines Schwarz im Nachtmodus</string>
<string name="pure_black_description">Ersetzt im Nachtmodus das Grau des Hintergrunds durch ein reines Schwarz. Reduziert den Stromverbrauch von Smartphones mit einem AMOLED Display.</string> <string name="pure_black_description">Ersetzt im Nachtmodus das Grau des Hintergrunds durch Schwarz. Reduziert den Stromverbrauch von Smartphones mit AMOLED Displays.</string>
<string name="interface_preferences">Oberfläche</string> <string name="interface_preferences">Oberfläche</string>
<string name="reverse_days">Kehre die Tagesreihenfolge um</string> <string name="reverse_days">Kehre die Tagesreihenfolge um</string>
<string name="reverse_days_description">Zeigt die Tage im Hauptfenster in umgekehrter Reihenfolge an.</string> <string name="reverse_days_description">Zeigt die Tage im Hauptfenster in umgekehrter Reihenfolge an.</string>
@ -211,6 +211,6 @@
<string name="pref_unknown_description">Tage ohne Daten von tatsächlichen Lücken unterscheiden. Um eine Lücke einzutragen zweimal markieren.</string> <string name="pref_unknown_description">Tage ohne Daten von tatsächlichen Lücken unterscheiden. Um eine Lücke einzutragen zweimal markieren.</string>
<string name="you_are_now_a_developer">Du bist nun ein Entwickler</string> <string name="you_are_now_a_developer">Du bist nun ein Entwickler</string>
<string name="activity_not_found">Für diese Aktion wurde keine App gefunden.</string> <string name="activity_not_found">Für diese Aktion wurde keine App gefunden.</string>
<string name="pref_midnight_delay_title">Den Tag um ein paar Stunden nach Mitternacht verlängern</string> <string name="pref_midnight_delay_title">Verlängere den Tag um ein paar Stunden nach Mitternacht</string>
<string name="pref_midnight_delay_description">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.</string> <string name="pref_midnight_delay_description">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.</string>
</resources> </resources>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> ~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~ ~
~ This file is part of Loop Habit Tracker. ~ This file is part of Loop Habit Tracker.
~ ~
@ -17,7 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop - Καταγραφή Συνηθειών</string> <string name="app_name">Loop - Καταγραφή Συνηθειών</string>
<string name="main_activity_title">Συνήθειες</string> <string name="main_activity_title">Συνήθειες</string>
<string name="action_settings">Ρυθμίσεις</string> <string name="action_settings">Ρυθμίσεις</string>
@ -28,15 +28,10 @@
<string name="add_habit">Νέα συνήθεια</string> <string name="add_habit">Νέα συνήθεια</string>
<string name="color_picker_default_title">Αλλαγή χρώματος</string> <string name="color_picker_default_title">Αλλαγή χρώματος</string>
<string name="toast_habit_created">Η συνήθεια δημιουργήθηκε</string> <string name="toast_habit_created">Η συνήθεια δημιουργήθηκε</string>
<string name="toast_habit_deleted">Οι συνήθειες διαγράφηκαν</string>
<string name="toast_habit_changed">Η συνήθεια άλλαξε</string>
<string name="toast_habit_archived">Η συνήθεια αρχειοθετήθηκε.</string>
<string name="toast_habit_unarchived">Έγινε αφαίρεση αρχειοθέτησης.</string>
<string name="overview">Επισκόπηση</string> <string name="overview">Επισκόπηση</string>
<string name="habit_strength">Δύναμη συνήθειας</string> <string name="habit_strength">Δύναμη συνήθειας</string>
<string name="history">Ιστορικό</string> <string name="history">Ιστορικό</string>
<string name="clear">Εκκαθάριση</string> <string name="clear">Εκκαθάριση</string>
<string name="days">ημέρες</string>
<string name="reminder">Υπενθύμιση</string> <string name="reminder">Υπενθύμιση</string>
<string name="save">Αποθήκευση</string> <string name="save">Αποθήκευση</string>
<string name="streaks">Σερί</string> <string name="streaks">Σερί</string>
@ -64,20 +59,16 @@
<string name="interval_custom">Προσαρμογή</string> <string name="interval_custom">Προσαρμογή</string>
<string name="pref_toggle_title">Κάντε εναλλαγή των επαναλήψεων με σύντομο πάτημα</string> <string name="pref_toggle_title">Κάντε εναλλαγή των επαναλήψεων με σύντομο πάτημα</string>
<string name="pref_toggle_description">Βολικότερο, αλλά ίσως προκαλέσει ακούσιες εναλλαγές.</string> <string name="pref_toggle_description">Βολικότερο, αλλά ίσως προκαλέσει ακούσιες εναλλαγές.</string>
<string name="pref_snooze_interval_title">Διάστημα αναβολής υπενθυμίσεων</string>
<string name="pref_rate_this_app">Βαθμολογήστε αυτή την εφαρμογή στο Google Play</string> <string name="pref_rate_this_app">Βαθμολογήστε αυτή την εφαρμογή στο Google Play</string>
<string name="pref_send_feedback">Στείλετε σχόλια</string> <string name="pref_send_feedback">Στείλετε σχόλια</string>
<string name="pref_view_source_code">Δείτε τον πηγαίο κώδικα στο GitHub</string> <string name="pref_view_source_code">Δείτε τον πηγαίο κώδικα στο GitHub</string>
<string name="links">Σύνδεσμοι</string> <string name="links">Σύνδεσμοι</string>
<string name="name">Όνομα</string> <string name="name">Όνομα</string>
<string name="settings">Ρυθμίσεις</string> <string name="settings">Ρυθμίσεις</string>
<string name="snooze_interval">Διάστημα αναβολής</string>
<string name="select_snooze_delay">Επιλογή καθυστέρησης αναβολής</string> <string name="select_snooze_delay">Επιλογή καθυστέρησης αναβολής</string>
<string name="hint_title">Γνωρίζατε;</string> <string name="hint_title">Γνωρίζατε;</string>
<string name="hint_drag">Αναδιατάξετε τις συνήθειες πατώντας παρατεταμένα στο όνομα και σύροντας στην σωστή θέση.</string> <string name="hint_drag">Αναδιατάξετε τις συνήθειες πατώντας παρατεταμένα στο όνομα και σύροντας στην σωστή θέση.</string>
<string name="hint_landscape">Μπορείτε να δείτε περισσότερες ημέρες στην οριζόντια προβολή.</string> <string name="hint_landscape">Μπορείτε να δείτε περισσότερες ημέρες στην οριζόντια προβολή.</string>
<string name="delete_habits">Διαγραφή συνηθειών</string>
<string name="delete_habits_message">Οι συνήθειες θα διαγραφτούν οριστικά. Αυτό δεν μπορεί να αναιρεθεί.</string>
<string name="habit_not_found">Η συνήθεια διαγράφηκε / δεν βρέθηκε</string> <string name="habit_not_found">Η συνήθεια διαγράφηκε / δεν βρέθηκε</string>
<string name="weekends">Σαββατοκύριακα</string> <string name="weekends">Σαββατοκύριακα</string>
<string name="any_weekday">Δευτέρα μέχρι Παρασκευή</string> <string name="any_weekday">Δευτέρα μέχρι Παρασκευή</string>
@ -111,7 +102,7 @@
<string name="generate_bug_report">Παραγωγή αναφοράς bug.</string> <string name="generate_bug_report">Παραγωγή αναφοράς bug.</string>
<string name="troubleshooting">Αντιμετ.Προβλημάτων</string> <string name="troubleshooting">Αντιμετ.Προβλημάτων</string>
<string name="help_translate">Βοηθήστε στην μετάφραση</string> <string name="help_translate">Βοηθήστε στην μετάφραση</string>
<string name="night_mode">Νυχτ.Λειτ.</string> <string name="night_mode" comment="dark_theme">Νυχτ.Λειτ.</string>
<string name="use_pure_black">Χρήση απόλυτου μαύρου στη νυχτ.λειτουργία</string> <string name="use_pure_black">Χρήση απόλυτου μαύρου στη νυχτ.λειτουργία</string>
<string name="pure_black_description">Αντικαθιστά τα γκρί υπόβαθρα με απόλυτα μαύρα σε νυχτ.λειτουργία. Μειώνει την κατανάλωση μπαταρίας σε συσκευές με οθόνη AMOLED.</string> <string name="pure_black_description">Αντικαθιστά τα γκρί υπόβαθρα με απόλυτα μαύρα σε νυχτ.λειτουργία. Μειώνει την κατανάλωση μπαταρίας σε συσκευές με οθόνη AMOLED.</string>
<string name="interface_preferences">Διεπιφάνεια</string> <string name="interface_preferences">Διεπιφάνεια</string>
@ -170,15 +161,14 @@
<string name="example_notes">(Προαιρετικό)</string> <string name="example_notes">(Προαιρετικό)</string>
<string name="yes_or_no_example">π.χ. Ξύπνησες νωρίς σήμερα; Ασκήθηκες; Έπαιξες σκάκι;</string> <string name="yes_or_no_example">π.χ. Ξύπνησες νωρίς σήμερα; Ασκήθηκες; Έπαιξες σκάκι;</string>
<string name="measurable">Μετρήσιμο</string> <string name="measurable">Μετρήσιμο</string>
<string name="measurable_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot;">π.χ. Πόσα χιλιόμετρα έτρεξες Πόσες σελίδες διάβασες; Πόσες θερμίδες έφαγες;</string>
<string name="x_times_per_week">%d φορές την εβδομάδα</string> <string name="x_times_per_week">%d φορές την εβδομάδα</string>
<string name="x_times_per_month">%d φορές το μήνα</string> <string name="x_times_per_month">%d φορές το μήνα</string>
<string name="yes_or_no_short_example">π.χ. Σωματική άσκηση</string> <string name="yes_or_no_short_example">π.χ. Σωματική άσκηση</string>
<string name="color">Χρώμα</string> <string name="color">Χρώμα</string>
<string name="example_target">π.χ. 15</string> <string name="example_target">π.χ. 15</string>
<string name="measurable_short_example">π.χ. Τρέξιμο</string> <string name="measurable_short_example">π.χ. Τρέξιμο</string>
<string name="measurable_question_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot; if that is more common in your country">π.χ. Πόσα χιλιόμετρα έτρεξες σήμερα?</string> <string name="measurable_question_example">π.χ. Πόσα χιλιόμετρα έτρεξες σήμερα?</string>
<string name="measurable_units_example" comment="Feel free to replace by &quot;km&quot; if that is more common in your country">π.χ. χιλιόμετρα</string> <string name="measurable_units_example">π.χ. χιλιόμετρα</string>
<string name="every_month">Κάθε μήνα</string> <string name="every_month">Κάθε μήνα</string>
<string name="validation_cannot_be_blank">Δεν μπορεί να είναι κενό</string> <string name="validation_cannot_be_blank">Δεν μπορεί να είναι κενό</string>
<string name="today">Σήμερα</string> <string name="today">Σήμερα</string>

@ -17,9 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<!--Generated by crowdin.com-->
<resources>
<string name="app_name">Loop Habit Tracker</string> <string name="app_name">Loop Habit Tracker</string>
<string name="main_activity_title">Kutimoj</string> <string name="main_activity_title">Kutimoj</string>
<string name="action_settings">Agordoj</string> <string name="action_settings">Agordoj</string>
@ -29,27 +27,56 @@
<string name="unarchive">Elarĥivigi</string> <string name="unarchive">Elarĥivigi</string>
<string name="add_habit">Aldonu kutimon</string> <string name="add_habit">Aldonu kutimon</string>
<string name="color_picker_default_title">Ŝanĝi koloron</string> <string name="color_picker_default_title">Ŝanĝi koloron</string>
<string name="toast_habit_changed">Kutimo ŝanĝita</string> <string name="toast_habit_created">Kutimo kreita</string>
<string name="toast_habit_archived">Kutimo arĥivita</string> <string name="overview">Generala vidado</string>
<string name="habit_strength">Kutimo forteco</string> <string name="habit_strength">Kutimo forteco</string>
<string name="days">tagoj</string> <string name="history">Historio</string>
<string name="clear">Liberigi</string>
<string name="reminder">Memorigaĵoj</string> <string name="reminder">Memorigaĵoj</string>
<string name="save">Konservi</string> <string name="save">Konservi</string>
<string name="streaks">Strioj</string> <string name="streaks">Strioj</string>
<string name="no_habits_found">Vi ne havas aktivajn kutimojn</string>
<string name="long_press_to_toggle">Premu kaj tenu por kontroli aŭ malmarki</string>
<string name="reminder_off">Neaktiva</string> <string name="reminder_off">Neaktiva</string>
<string name="create_habit">Krei kutimon</string>
<string name="edit_habit">Eldoni kutimon</string>
<string name="check">Kontrolu</string>
<string name="snooze">Poste</string> <string name="snooze">Poste</string>
<!-- App introduction -->
<string name="intro_title_1">Bonvenon</string> <string name="intro_title_1">Bonvenon</string>
<string name="intro_description_1">Loop Habit Tracker helpas vin krei kaj konservi bonajn kutimojn.</string>
<string name="intro_title_2">Krei kelkajn novajn kutimojn</string>
<string name="intro_description_2">Ĉiutage, post plenumi vian kutimon, metu markostampon en la app.</string>
<string name="intro_title_4">Por atenti vian progreson:</string>
<string name="intro_description_4">Detalaj grafikaĵoj montras al vi kiel viaj kutimoj pliboniĝis kun la tempo.</string>
<string name="interval_15_minutes">15 minutoj</string> <string name="interval_15_minutes">15 minutoj</string>
<string name="interval_30_minutes">30 minutoj</string> <string name="interval_30_minutes">30 minutoj</string>
<string name="interval_1_hour">1 horo</string>
<string name="interval_2_hour">2 horoj</string>
<string name="interval_4_hour">4 horoj</string>
<string name="interval_8_hour">4 horoj</string>
<string name="interval_24_hour">24 horoj</string>
<string name="interval_always_ask">Ĉiam demandu</string>
<string name="interval_custom">Kutimo</string>
<string name="pref_toggle_title">Ŝalti per mallonga gazetaro</string>
<string name="pref_toggle_description">Metu markilojn per sola frapeto anstataŭ premi kaj teni. Pli oportune, sed eble kaŭzas hazardajn ŝanĝojn.</string>
<string name="pref_rate_this_app">Taksu ĉi tiun aplikaĵon en Google Play</string>
<string name="pref_send_feedback">Sendu reagojn al programisto</string>
<string name="pref_view_source_code">Vidu fontkodon ĉe GitHub</string>
<string name="links">Ligilo</string>
<string name="name">Nomo</string>
<string name="settings">Agordoj</string> <string name="settings">Agordoj</string>
<string name="delete_habits">Forigi kutimojn</string> <string name="select_snooze_delay">Elektu dormetigas prokrasti</string>
<string name="hint_title">Ĉu vi sciis?</string>
<string name="hint_drag">Por reordigi la enskribojn, premi kaj tenu la nomon de la kutimo, poste trenu ĝin al la ĝusta loko.</string>
<string name="hint_landscape">Vi povas vidi pliajn tagojn enmetante vian telefonon en pejzaĝa reĝimo.</string>
<string name="habit_not_found">Kutimo forigita / ne trovita</string>
<string name="weekends">Semajnfinoj</string> <string name="weekends">Semajnfinoj</string>
<string name="any_weekday">Lundo al vendredo</string> <string name="any_weekday">Lundo al vendredo</string>
<string name="any_day">Io semajntago</string> <string name="any_day">Io semajntago</string>
<string name="select_weekdays">Elekti tagojn</string> <string name="select_weekdays">Elekti tagojn</string>
<string name="export_to_csv">Eksporti kiel CSV</string> <string name="export_to_csv">Eksporti kiel CSV</string>
<string name="done_label">Farite</string> <string name="done_label">Farite</string>
<string name="clear_label">Liberigi</string>
<string name="select_hours">Elekti horojn</string> <string name="select_hours">Elekti horojn</string>
<string name="select_minutes">Elekti minutojn</string> <string name="select_minutes">Elekti minutojn</string>
<string name="about">Pri programo</string> <string name="about">Pri programo</string>
@ -57,29 +84,73 @@
<string name="developers">Evoluigantoj</string> <string name="developers">Evoluigantoj</string>
<string name="version_n">Versio %s</string> <string name="version_n">Versio %s</string>
<string name="frequency">Frekvenco</string> <string name="frequency">Frekvenco</string>
<string name="checkmark">Markobutono</string>
<string name="best_streaks">Plej bonaj strioj</string>
<string name="every_day">Ĉiu tago</string> <string name="every_day">Ĉiu tago</string>
<string name="every_week">Ĉiu semajno</string> <string name="every_week">Ĉiu semajno</string>
<string name="help">Helpo &amp; Ofte Demandite</string> <string name="help">Helpo &amp; Ofte Demandite</string>
<string name="could_not_export">Malsukcesis eksporti datumojn.</string>
<string name="could_not_import">Malsukcesis importi datumojn.</string>
<string name="file_not_recognized">Dosiero ne rekonita.</string> <string name="file_not_recognized">Dosiero ne rekonita.</string>
<string name="habits_imported">Kutimoj importitaj sukcese.</string>
<string name="import_data">Importi datumojn</string>
<string name="export_full_backup">Eksporti plenan sekurkopion</string>
<string name="import_data_summary">Elportas plenajn sekurkopiojn eksportitajn de ĉi tiu aplikaĵo, same kiel dosierojn generitajn de Tickmate, HabitBull aŭ Rewire. Vidu DPO por pliaj informoj.</string>
<string name="export_as_csv_summary">Generas dosierojn, kiujn oni povas malfermi per kalkultabelaj programoj kiel Microsoft Excel aŭ OpenOffice Calc. Ĉi tiu dosiero ne povas esti importita reen.</string>
<string name="export_full_backup_summary">Generas dosieron, kiu enhavas ĉiujn viajn datumojn. Ĉi tiu dosiero povas esti importita reen.</string>
<string name="bug_report_failed">Malsukcesis generi raporton pri eraroj.</string>
<string name="generate_bug_report">Generu raporton pri eraroj</string>
<string name="troubleshooting">Problemserĉado</string> <string name="troubleshooting">Problemserĉado</string>
<string name="night_mode">Nokta reĝimo</string> <string name="help_translate">Helpu traduki ĉi tiun aplikon</string>
<string name="night_mode" comment="dark_theme">Nokta reĝimo</string>
<string name="use_pure_black">Uzu puran nigron en malhela temo</string>
<string name="pure_black_description">Anstataŭigas grizajn fonojn per pura nigra en malhela temo. Reduktas baterian uzon en telefonoj kun AMOLED-ekrano.</string>
<string name="interface_preferences">Intervizago</string>
<string name="reverse_days">Reversa ordo de tagoj</string>
<string name="reverse_days_description">Montri tagojn en inversa ordo sur la ĉefa ekrano.</string>
<string name="day">Tago</string> <string name="day">Tago</string>
<string name="week">Semajno</string> <string name="week">Semajno</string>
<string name="month">Monato</string> <string name="month">Monato</string>
<string name="quarter">Jarkvarono</string> <string name="quarter">Jarkvarono</string>
<string name="year">Jaro</string> <string name="year">Jaro</string>
<!-- Different types of habits --> <string name="total">Totalo</string>
<!-- Middle part of the sentence '1 time in xx days' --> <string name="yes_or_no">Jes aŭ ne</string>
<string name="every_x_days">Ĉiujn %d tagojn</string>
<string name="every_x_weeks">Ĉiuj %d semajnoj</string>
<string name="score">Poentaroj</string>
<string name="reminder_sound">rememor-sonorilo</string>
<string name="none">Nenio</string> <string name="none">Nenio</string>
<string name="filter">Filtrilo</string> <string name="filter">Filtrilo</string>
<string name="hide_completed">Kaŝi kompletajn</string> <string name="hide_completed">Kaŝi kompletajn</string>
<string name="hide_archived">Kaŝi arĥivitajn</string> <string name="hide_archived">Kaŝi arĥivitajn</string>
<string name="sticky_notifications">Faru sciigojn gluaj</string>
<string name="sticky_notifications_description">Malhelpas, ke sciigoj estu forglititaj.</string>
<string name="led_notifications">Atentiga lumo</string>
<string name="led_notifications_description">Montras palpebrumantan lumon por memorigiloj. Nur havebla en telefonoj kun LED-sciigaj lumoj.</string>
<string name="repair_database">Ripari datumbazon</string> <string name="repair_database">Ripari datumbazon</string>
<string name="database_repaired">Datumbazon riparita.</string> <string name="database_repaired">Datumbazon riparita.</string>
<string name="uncheck">Malmarku</string>
<string name="toggle">Ŝalti</string>
<string name="action">Ago</string> <string name="action">Ago</string>
<string name="habit">Kutimo</string> <string name="habit">Kutimo</string>
<string name="sort">Enkursigi</string> <string name="sort">Enkursigi</string>
<string name="manually">Mane</string>
<string name="by_name">Laŭ nomo</string> <string name="by_name">Laŭ nomo</string>
<string name="by_color">Laŭ koloro</string> <string name="by_color">Laŭ koloro</string>
<string name="by_score">Laŭ poentaro</string>
<string name="export">Eksporti</string> <string name="export">Eksporti</string>
<string name="long_press_to_edit">Premu kaj tenu por ŝanĝi la valoron</string>
<string name="change_value">Ŝanĝi valoron</string>
<string name="calendar">Kalendaro:</string>
<string name="unit">Unueco</string>
<string name="example_question_boolean">ekz. Ĉu vi ekzercis hodiaŭ?</string>
<string name="question">Demando</string>
<string name="target">Celo</string>
<string name="yes">Jes</string>
<string name="no">Ne</string>
<string name="customize_notification_summary">Ŝanĝu sonon, vibron, lumon kaj aliajn sciigajn agordojn</string>
<string name="customize_notification">Adaptitaj sciigoj</string>
<string name="pref_view_privacy">Vidu privatecan politikon</string>
<string name="view_all_contributors">Rigardi ĉiujn kontribuantojn&#8230;</string>
<string name="database">Datumbazo</string>
</resources> </resources>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> ~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~ ~
~ This file is part of Loop Habit Tracker. ~ This file is part of Loop Habit Tracker.
~ ~
@ -17,7 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop Analizador de Hábitos</string> <string name="app_name">Loop Analizador de Hábitos</string>
<string name="main_activity_title">Hábitos</string> <string name="main_activity_title">Hábitos</string>
<string name="action_settings">Configuración</string> <string name="action_settings">Configuración</string>
@ -28,19 +28,31 @@
<string name="add_habit">Agregar hábito</string> <string name="add_habit">Agregar hábito</string>
<string name="color_picker_default_title">Cambiar color</string> <string name="color_picker_default_title">Cambiar color</string>
<string name="toast_habit_created">Hábito creado</string> <string name="toast_habit_created">Hábito creado</string>
<string name="toast_habit_deleted">Hábitos eliminados</string> <plurals name="toast_habits_changed">
<string name="toast_habit_changed">Hábito cambiado</string> <item quantity="one">Hábito cambiado</item>
<string name="toast_habit_archived">Hábitos archivados</string> <item quantity="other">Hábitos cambiados</item>
<string name="toast_habit_unarchived">Hábitos desarchivados</string> </plurals>
<plurals name="toast_habits_deleted">
<item quantity="one">Hábito eliminado</item>
<item quantity="other">Hábitos eliminados</item>
</plurals>
<plurals name="toast_habits_archived">
<item quantity="one">Hábito archivado</item>
<item quantity="other">Hábitos archivados</item>
</plurals>
<plurals name="toast_habits_unarchived">
<item quantity="one">Hábito desarchivado</item>
<item quantity="other">Hábitos desarchivados</item>
</plurals>
<string name="overview">Resumen</string> <string name="overview">Resumen</string>
<string name="habit_strength">Fuerza del hábito</string> <string name="habit_strength">Fuerza del hábito</string>
<string name="history">Historial</string> <string name="history">Historial</string>
<string name="clear">Borrar</string> <string name="clear">Borrar</string>
<string name="days">días</string>
<string name="reminder">Recordatorio</string> <string name="reminder">Recordatorio</string>
<string name="save">Guardar</string> <string name="save">Guardar</string>
<string name="streaks">Rachas</string> <string name="streaks">Rachas</string>
<string name="no_habits_found">No tienes hábitos activos</string> <string name="no_habits_found">No tienes hábitos activos</string>
<string name="no_habits_left_to_do">¡Ya terminaste todo por hoy!</string>
<string name="long_press_to_toggle">Mantener apretado para marcar o desmarcar</string> <string name="long_press_to_toggle">Mantener apretado para marcar o desmarcar</string>
<string name="reminder_off">Apagado</string> <string name="reminder_off">Apagado</string>
<string name="create_habit">Crear hábito</string> <string name="create_habit">Crear hábito</string>
@ -64,20 +76,24 @@
<string name="interval_custom">Personalizar...</string> <string name="interval_custom">Personalizar...</string>
<string name="pref_toggle_title">Marca las repeticiones con una pulsación corta</string> <string name="pref_toggle_title">Marca las repeticiones con una pulsación corta</string>
<string name="pref_toggle_description">Más cómodo, pero puede causar marcas accidentales.</string> <string name="pref_toggle_description">Más cómodo, pero puede causar marcas accidentales.</string>
<string name="pref_snooze_interval_title">Tiempo de espera al aplazar recordatorios</string>
<string name="pref_rate_this_app">Valora esta aplicación en Google Play</string> <string name="pref_rate_this_app">Valora esta aplicación en Google Play</string>
<string name="pref_send_feedback">Enviar sugerencias al desarrollador</string> <string name="pref_send_feedback">Enviar sugerencias al desarrollador</string>
<string name="pref_view_source_code">Ver código fuente en GitHub</string> <string name="pref_view_source_code">Ver código fuente en GitHub</string>
<string name="links">Enlaces</string> <string name="links">Enlaces</string>
<string name="name">Nombre</string> <string name="name">Nombre</string>
<string name="settings">Configuración</string> <string name="settings">Configuración</string>
<string name="snooze_interval">Intervalo de espera</string>
<string name="select_snooze_delay">Seleccione el retardo de la interrupción</string> <string name="select_snooze_delay">Seleccione el retardo de la interrupción</string>
<string name="hint_title">¿Sabías qué?</string> <string name="hint_title">¿Sabías qué?</string>
<string name="hint_drag">Para reordenar las entradas, mantén la pulsado sobre el nombre del hábito, después arrástralo a su posición correcta.</string> <string name="hint_drag">Para reordenar las entradas, mantén la pulsado sobre el nombre del hábito, después arrástralo a su posición correcta.</string>
<string name="hint_landscape">Puedes ver más días al poner tu teléfono en modo horizontal.</string> <string name="hint_landscape">Puedes ver más días al poner tu teléfono en modo horizontal.</string>
<string name="delete_habits">Eliminar Hábitos</string> <plurals name="delete_habits_title">
<string name="delete_habits_message">Los hábitos serán eliminados permanentemente. Esta acción no se puede deshacer.</string> <item quantity="one">¿Eliminar hábito?</item>
<item quantity="other">¿Eliminar hábitos?</item>
</plurals>
<plurals name="delete_habits_message">
<item quantity="one">El hábito se eliminará permanentemente. Esta acción no se puede deshacer.</item>
<item quantity="other">Los hábitos se eliminarán permanentemente. Esta acción no se puede deshacer.</item>
</plurals>
<string name="habit_not_found">Hábito eliminado / no encontrado</string> <string name="habit_not_found">Hábito eliminado / no encontrado</string>
<string name="weekends">Fines de semana</string> <string name="weekends">Fines de semana</string>
<string name="any_weekday">De lunes a viernes</string> <string name="any_weekday">De lunes a viernes</string>
@ -111,7 +127,7 @@
<string name="generate_bug_report">Generar reporte de errores</string> <string name="generate_bug_report">Generar reporte de errores</string>
<string name="troubleshooting">Solución de problemas</string> <string name="troubleshooting">Solución de problemas</string>
<string name="help_translate">Ayuda a traducir esta app</string> <string name="help_translate">Ayuda a traducir esta app</string>
<string name="night_mode">Modo nocturno</string> <string name="night_mode" comment="dark_theme">Modo nocturno</string>
<string name="use_pure_black">Utilizar color negro en modo nocturno</string> <string name="use_pure_black">Utilizar color negro en modo nocturno</string>
<string name="pure_black_description">Reemplaza fondos grises por color negro en modo nocturno. Reduce el consumo de batería en teléfonos con pantalla AMOLED.</string> <string name="pure_black_description">Reemplaza fondos grises por color negro en modo nocturno. Reduce el consumo de batería en teléfonos con pantalla AMOLED.</string>
<string name="interface_preferences">Interfície</string> <string name="interface_preferences">Interfície</string>
@ -147,6 +163,7 @@
<string name="by_name">Por nombre</string> <string name="by_name">Por nombre</string>
<string name="by_color">Por color</string> <string name="by_color">Por color</string>
<string name="by_score">Por puntuación</string> <string name="by_score">Por puntuación</string>
<string name="by_status">Por estado</string>
<string name="export">Exportar</string> <string name="export">Exportar</string>
<string name="long_press_to_edit">Mantenga presionado para cambiar el valor</string> <string name="long_press_to_edit">Mantenga presionado para cambiar el valor</string>
<string name="change_value">Cambiar valor</string> <string name="change_value">Cambiar valor</string>
@ -170,16 +187,30 @@
<string name="example_notes">(Opcional)</string> <string name="example_notes">(Opcional)</string>
<string name="yes_or_no_example">por ejemplo, ¿te despertaste temprano hoy? ¿Hiciste ejercicio? ¿Jugaste al ajedrez?</string> <string name="yes_or_no_example">por ejemplo, ¿te despertaste temprano hoy? ¿Hiciste ejercicio? ¿Jugaste al ajedrez?</string>
<string name="measurable">Medible</string> <string name="measurable">Medible</string>
<string name="measurable_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot;">por ejemplo, ¿cuántos quilómetros has corrido hoy? ¿Cuántas páginas has leído? ¿Cuántas calorías has comido?</string> <string name="measurable_example">ej. ¿Cuántas millas ha corrido hoy? ¿Cuántas páginas ha leído?</string>
<string name="x_times_per_week">%d veces por semana</string> <string name="x_times_per_week">%d veces por semana</string>
<string name="x_times_per_month">%d veces al mes</string> <string name="x_times_per_month">%d veces al mes</string>
<string name="yes_or_no_short_example">ej. Ejercicio</string> <string name="yes_or_no_short_example">ej. Ejercicio</string>
<string name="color">Color</string> <string name="color">Color</string>
<string name="example_target">ej. 15</string> <string name="example_target">ej. 15</string>
<string name="measurable_short_example">por ejemplo, correr</string> <string name="measurable_short_example">por ejemplo, correr</string>
<string name="measurable_question_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot; if that is more common in your country">ej. ¿Cuántos quilómetros has corrido hoy?</string> <string name="measurable_question_example">ej. ¿Cuántos quilómetros has corrido hoy?</string>
<string name="measurable_units_example" comment="Feel free to replace by &quot;km&quot; if that is more common in your country">ej. millas</string> <string name="measurable_units_example">ej. millas</string>
<string name="every_month">Cada mes</string> <string name="every_month">Cada mes</string>
<string name="validation_cannot_be_blank">No puede estar en blanco</string> <string name="validation_cannot_be_blank">No puede estar en blanco</string>
<string name="today">Hoy</string> <string name="today">Hoy</string>
<string name="enter">Introducir</string>
<string name="no_habits">No se encontraron hábitos</string>
<string name="no_numerical_habits">No se encontraron hábitos medibles</string>
<string name="no_boolean_habits">No se encontraron hábitos de sí o no</string>
<string name="increment">Incrementar</string>
<string name="decrement">Decrementar</string>
<string name="pref_skip_title">Habilitar días libres</string>
<string name="pref_skip_description">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.</string>
<string name="pref_unknown_title">Mostrar interrogantes para datos faltantes</string>
<string name="pref_unknown_description">Diferenciar los días sin datos de los lapsos reales. Para ingresar un lapso, alternar dos veces.</string>
<string name="you_are_now_a_developer">Ahora eres desarrollador</string>
<string name="activity_not_found">No se encontró ninguna aplicación que admita esta acción</string>
<string name="pref_midnight_delay_title">Ampliar día unas horas después de medianoche</string>
<string name="pref_midnight_delay_description">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.</string>
</resources> </resources>

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
~ Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> ~ Copyright (C) 2016-2021 Álinson Santos Xavier <git@axavier.org>
~ ~
~ This file is part of Loop Habit Tracker. ~ This file is part of Loop Habit Tracker.
~ ~
@ -17,7 +17,7 @@
~ You should have received a copy of the GNU General Public License along ~ You should have received a copy of the GNU General Public License along
~ with this program. If not, see <http://www.gnu.org/licenses/>. ~ with this program. If not, see <http://www.gnu.org/licenses/>.
--> -->
<resources> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name">Loop Habit Tracker</string> <string name="app_name">Loop Habit Tracker</string>
<string name="main_activity_title">Ohiturak</string> <string name="main_activity_title">Ohiturak</string>
<string name="action_settings">Ezarpenak</string> <string name="action_settings">Ezarpenak</string>
@ -28,15 +28,10 @@
<string name="add_habit">Gehitu ohitura</string> <string name="add_habit">Gehitu ohitura</string>
<string name="color_picker_default_title">Kolorea aldatu</string> <string name="color_picker_default_title">Kolorea aldatu</string>
<string name="toast_habit_created">Ohitura sortu da</string> <string name="toast_habit_created">Ohitura sortu da</string>
<string name="toast_habit_deleted">Ohiturak ezabatu dira</string>
<string name="toast_habit_changed">Ohitura aldatu egin da</string>
<string name="toast_habit_archived">Ohiturak artxibatu dira</string>
<string name="toast_habit_unarchived">Ohiturak desartxibatu dira</string>
<string name="overview">Ikuspegi orokorra</string> <string name="overview">Ikuspegi orokorra</string>
<string name="habit_strength">Ohituraren indarra</string> <string name="habit_strength">Ohituraren indarra</string>
<string name="history">Historia</string> <string name="history">Historia</string>
<string name="clear">Garbitu</string> <string name="clear">Garbitu</string>
<string name="days">egunetan</string>
<string name="reminder">Oroigarria</string> <string name="reminder">Oroigarria</string>
<string name="save">Gorde</string> <string name="save">Gorde</string>
<string name="streaks">Boladak</string> <string name="streaks">Boladak</string>
@ -64,20 +59,16 @@
<string name="interval_custom">Pertsonalizatua...</string> <string name="interval_custom">Pertsonalizatua...</string>
<string name="pref_toggle_title">Ukitze laburrarekin markatu</string> <string name="pref_toggle_title">Ukitze laburrarekin markatu</string>
<string name="pref_toggle_description">Ukitze bakar batekin marka jartzen du ukitu eta mantendu egin beharrean. Erosoagoa, baina nahi gabeko markak ekar litzake.</string> <string name="pref_toggle_description">Ukitze bakar batekin marka jartzen du ukitu eta mantendu egin beharrean. Erosoagoa, baina nahi gabeko markak ekar litzake.</string>
<string name="pref_snooze_interval_title">Atzeratze tartea oroigarrietan</string>
<string name="pref_rate_this_app">Aplikazio hau Google Playen puntuatu</string> <string name="pref_rate_this_app">Aplikazio hau Google Playen puntuatu</string>
<string name="pref_send_feedback">Zure iritzia garatzaileari bidali</string> <string name="pref_send_feedback">Zure iritzia garatzaileari bidali</string>
<string name="pref_view_source_code">Iturburu kodea GitHuben ikusi</string> <string name="pref_view_source_code">Iturburu kodea GitHuben ikusi</string>
<string name="links">Loturak</string> <string name="links">Loturak</string>
<string name="name">Izena</string> <string name="name">Izena</string>
<string name="settings">Ezarpenak</string> <string name="settings">Ezarpenak</string>
<string name="snooze_interval">Atzeratze tartea</string>
<string name="select_snooze_delay">Aukeratu atzerapen denbora</string> <string name="select_snooze_delay">Aukeratu atzerapen denbora</string>
<string name="hint_title">Ba al zenekien?</string> <string name="hint_title">Ba al zenekien?</string>
<string name="hint_drag">Sarrerak berrantolatzeko, sakatu eta mantendu ohituraren izena, ondoren mugi ezazu leku aproposera.</string> <string name="hint_drag">Sarrerak berrantolatzeko, sakatu eta mantendu ohituraren izena, ondoren mugi ezazu leku aproposera.</string>
<string name="hint_landscape">Egun gehiago ikus ditzakezu zure gailua paisai moduan jarriz.</string> <string name="hint_landscape">Egun gehiago ikus ditzakezu zure gailua paisai moduan jarriz.</string>
<string name="delete_habits">Ohiturak ezabatu</string>
<string name="delete_habits_message">Ohiturak betirako ezabatuko dira. Ekintza hau ezin da desegin.</string>
<string name="habit_not_found">Ohitura ezabatua / ez aurkitua</string> <string name="habit_not_found">Ohitura ezabatua / ez aurkitua</string>
<string name="weekends">Asteburuak</string> <string name="weekends">Asteburuak</string>
<string name="any_weekday">Astelehenetik ostiralera</string> <string name="any_weekday">Astelehenetik ostiralera</string>
@ -111,7 +102,7 @@
<string name="generate_bug_report">Akats txostena sortu</string> <string name="generate_bug_report">Akats txostena sortu</string>
<string name="troubleshooting">Arazoen konponketa</string> <string name="troubleshooting">Arazoen konponketa</string>
<string name="help_translate">Lagundu aplikazio hau itzultzen</string> <string name="help_translate">Lagundu aplikazio hau itzultzen</string>
<string name="night_mode">Azal iluna</string> <string name="night_mode" comment="dark_theme">Azal iluna</string>
<string name="use_pure_black">erabili beltz hutsa azal ilunean</string> <string name="use_pure_black">erabili beltz hutsa azal ilunean</string>
<string name="pure_black_description">Atzeko plano grisak beltz hutsez aldatzen ditu azal ilunean. Bateriaren erabilera gutxitzen du AMOLED duten gailuetan.</string> <string name="pure_black_description">Atzeko plano grisak beltz hutsez aldatzen ditu azal ilunean. Bateriaren erabilera gutxitzen du AMOLED duten gailuetan.</string>
<string name="interface_preferences">Interfazea</string> <string name="interface_preferences">Interfazea</string>
@ -170,15 +161,14 @@
<string name="example_notes">(Aukerazkoa)</string> <string name="example_notes">(Aukerazkoa)</string>
<string name="yes_or_no_example">adib. Gaur goiz esnatu zara? Ariketa fisikoa egin al duzu? Xakean jolastu al duzu?</string> <string name="yes_or_no_example">adib. Gaur goiz esnatu zara? Ariketa fisikoa egin al duzu? Xakean jolastu al duzu?</string>
<string name="measurable">Neurgarria</string> <string name="measurable">Neurgarria</string>
<string name="measurable_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot;">adib. Zenbat kilometro egin dituzu korrika gaur? Zenbat orrialde irakurri dituzu? Zenbat kaloria jan dituzu?</string>
<string name="x_times_per_week">Astean %d aldiz</string> <string name="x_times_per_week">Astean %d aldiz</string>
<string name="x_times_per_month">Hilean %d aldiz</string> <string name="x_times_per_month">Hilean %d aldiz</string>
<string name="yes_or_no_short_example">adib. Ariketa</string> <string name="yes_or_no_short_example">adib. Ariketa</string>
<string name="color">Kolorea</string> <string name="color">Kolorea</string>
<string name="example_target">adib. 15</string> <string name="example_target">adib. 15</string>
<string name="measurable_short_example">adib. Korrika egin</string> <string name="measurable_short_example">adib. Korrika egin</string>
<string name="measurable_question_example" comment="Feel free to replace &quot;miles&quot; by &quot;km&quot; if that is more common in your country">adib. Zenbat kilometro egin dituzu korrika gaur?</string> <string name="measurable_question_example">adib. Zenbat kilometro egin dituzu korrika gaur?</string>
<string name="measurable_units_example" comment="Feel free to replace by &quot;km&quot; if that is more common in your country">adib. Kilometroak</string> <string name="measurable_units_example">adib. Kilometroak</string>
<string name="every_month">Hilabetero</string> <string name="every_month">Hilabetero</string>
<string name="validation_cannot_be_blank">Ezin da hutsik egon</string> <string name="validation_cannot_be_blank">Ezin da hutsik egon</string>
<string name="today">Gaur</string> <string name="today">Gaur</string>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save